Development log - zulumike/bdmi GitHub Wiki
Ny versjon av BDMI medlemsregister.
- Ble mye rot i strukturen på den forrige versjonen. Pluss at jeg nå ønsker å utvikle med react.
- Må få samlet alle funksjoner i en Azure functions app tror jeg.
- Sendgrid er allerede satt opp og api-key opprettet. Bruker samme der tenker jeg.
- Samme med Cosmos DB.
Lesestoff:
Create Azure function: https://learn.microsoft.com/en-us/azure/azure-functions/create-first-function-vs-code-node
Connect Azure Database (Cosmos db): https://learn.microsoft.com/en-us/azure/azure-functions/functions-add-output-binding-cosmos-db-vs-code?pivots=programming-language-javascript&tabs=in-process
Valg av DB Serverless eller annen: https://learn.microsoft.com/nb-no/azure/cosmos-db/throughput-serverless
Cosmos DB API Valg: https://learn.microsoft.com/en-us/azure/cosmos-db/choose-api
HTTP Trigger: https://learn.microsoft.com/en-us/azure/azure-functions/functions-bindings-http-webhook-trigger?tabs=in-process%2Cfunctionsv2&pivots=programming-language-javascript#secure-an-http-endpoint-in-production
sql query: https://learn.microsoft.com/en-us/azure/cosmos-db/nosql/query/getting-started
Cosmos db API and bindings++ : https://learn.microsoft.com/en-us/azure/azure-functions/functions-bindings-cosmosdb-v2?tabs=in-process%2Cextensionv4&pivots=programming-language-javascript
SendGrid eksempler: https://github.com/sendgrid/sendgrid-nodejs/blob/main/docs/use-cases/README.md#email-use-cases
Logg:
22.02.2023 -1
-
Opprettet Github repository fra denne malen: https://github.com/login?return_to=%2Fstaticwebdev%2Freact-basic%2Fgenerate
-
Klonet denne lokalt i vs code
-
Opprettet Azure static web app via vs code (F1: Azure Create Static Web App. (name: bdmi, Region: West-Europe, Build preset: React, App Location: /, Build location: build))
-
Opprettet 2 stk Azure static web app functions ved å kjøre F1: Azure Static Web App: Create HTTP Function
- DBWrite og SendEmail
- Må nok opprette flere etterhvert (bl.a DBRead).
- Kopierte function.json og index.js fra gamle-appen.
- La inn application settings i Azure -portal og i local.settings.json
- bdmiDBConnectionString og SendGridApiKey
-
Oppgraderte npm pakker pga en del advarsler under bygging. Fremdeles noen igjen pga nth-check som av en eller annen grunn vil degradere react-scripts fra 5.0.1 til 2.1.3 Denne må bare ignoreres.
23.02.2023 -2
- Oppgraderer memberform til å benytte useState
24.02.2023 -3
- Prøve å få testet api'ene
- DBWrite: sliter med å få riktig data overført. Prøvd mye forskjellig, men obs obs: Må kjøre npm run build og swa-kommando ved endring!!!
25.02.2023 -4
- Fant ut litt mer om å sende data til api. JSON.stringify måtte gjøres litt enklere (uten {})
- Nå må jeg bare finne ut hvordan legge til data i formData i funksjonen addMemberToDB i MemberForm.js
- Det er jo easy-peasy. objekt.key = value
28.02.2023 -5
- La inn litt dokumentasjon på de forskjellige funksjonene
- Prøver å få til environment variabler..... Ikke rett frem det der. For en react app må key navnes REACT_APP_xxx Endret dette, uten at det hjalp. Prøvd å legge til local.settings.json i src mappa Det fungerte heller ikke. Prøver nå å legge i rota på prosjektet... Fremdeles undefined Endret til å lagre det i en fil som heter .env istedenfor local.settings.json. Det fungerte. Men får cors problemer når jeg kjører run and debug. FUngerer med å starta vha swa
01.03.2023 -6
-
Funnet ut litt mer rund environment variabler. Legger variabler i .env fil på rota av prosjektet Bruker deretter en if setning for å finne ut om development eller production Og henter henholdsvis local eller azure verdi. Det funka bra.
-
Det som er irriterende nå er at jeg må starte applikasjonen via swa kommando hvis api skal funke uten CORS feil. Det er forsåvidt greit nok, men da må jeg kjøre npm run build og swa-kommando for hver minste endring jeg ønsker å teste....
-
Fant løsning på CORS: La til følgende i local.settings.json: "Host": { "LocalHttpPort": 7071, "CORS": "*" }
02.03.2023 -7
-
Prøvd å sette opp epost-sending. Foreløpig dårlig resultat.....
-
Prøve med Sendgrid sin egen npm tror jeg. Men via egen api... Må installere sendgrid først: npm install --save @sendgrid/mail NB: Måtte gjøres i api-mappen Gjorde det først i rota, men da funka api ikke i azure, kun lokalt. Funker etter litt om og men....
-
Fått lagt om slik at får velkommen melding hvis skriving til db ok feilmelding hvis ikke.
-
Må få lagt inn en sjekk om e-post adresse eksisterer fra før. Må derfor få laget en api og funksjon som leser databasen, kanskje inn i et array? Tror derfor jeg starter på en komponent for admin. Logg inn. Legge inn e.post adresse -> verifisere med kode. Form for å registrere nye medlemmer, nb: pluss rolle og status Liste over alle medlemmer Med knapper for å slette, redigere, endre rolle og status
-
Startet med å kopiere MemberForm.js til MemberFormAdmin.js og foretok noen justeringer. Mere må til....
03.03.2023 -8
-
klonet repository til pc på jobb. Installerte node.js 16 på den pc
Prøvde først med 18, men da funker ikke swa... -
Fjernet .env fra rota, da jeg har lagt variabler direkte i kode.
-
Det er et problem med at sendEmail api ikke avsluttes på et vis. status i dev-console\network er pending Får til slutt en timeout Selv om e-post faktisk blir sendt. Endret funksjonen til å være async, ser nå ut til å fungere bedre.
-
Fortsatt på memberFormAdmin. Lagt til status og rolle.
-
Startet på api/function for å lese db Kommet så langt at jeg har laget api/function som kjører en sql query Select * from documents og leser da alle dokumenter. Sender dette til front-end og presenterer i Console Neste blir å "strippe" json og lagre i et array. Samt presentere i en tabell.
04.03.2023 -9
-
Utfordringer med at react vil rendre data før de er klar. Løste dette vha https://www.geeksforgeeks.org/how-to-wait-for-a-reactjs-component-to-finish-updating/
-
Må få laget slik at MemberForm for lest inn alle medlemmer slik at man får sjekket epost eksisterer fra før. Tenkte da at det kan være lurt å lage en gjenbrukbar funksjon. Opprettet egen mappe under src kalt functions. Opprettet readAllMembers.js lager er funksjon der for å lese db og hente ut alle medlemmer til et array.
-
Opprettet funksjon for å hente inn alle medlemmer til array
-
Opprettet funksjon for å sjekke om e-post adresse eller telefonnummer eksisterer fra før
-
Ordnet kontroll slik at man ikke kan registrere duplikater (e-post og telefonnummer)
-
Opprettet en login komponent, men gjenstår en del her....
05.03.2023 -10
- Opprettet en enkel variant av login. prompt for e-post adresse. Hvis epost adresse eksisterer og bruker er admin eller superbruker får man opp admin-form og alle medlemmer listes opp. !! * Vurdere å legge inn en sperre på å liste opp alle medlemmer i api...
- Neste blir å få lagret login-state i local storage (med kryptering-ish) Dette er nå ordnet, men foreløpig uten kryptering. Må vurdere å lage en ny api, som henter en "nøkkel" fra application settings/local.settings.json.
- Installert react-modal
- Startet med å legge til en modal i MemberList Skal åpnes når man trykker på et medlem.
- Begynte med å forenkle api oppkallene. Bruker fetch isteden for. Tok litt tid før jeg fant ut hvordan man sender data til api. Må vel også skrive om der det sendes e-post og skrives til db... Det er gjort 06.03.2023
06.03.2023 -11
-
Skrevet om DBWrite api
Lagt til oppslag på id, hvis id, kjøres bindingen for å oppdatere eksisterende medlem Hvis ikke kjøres binding for å legge til nytt medlem. -
Skrevet om funksjon for lagring av nytt medlem. Lagt dette i en egen fil under functions.
-
Lagt til funksjon i egen fil for oppdatering av eksisterende medlem.
-
Oppdatering av eksisterende medlem funker ikke helt. Det blir opprettet nytt medlem istedenfor. La til eksisterende id i json strengen som sendes. (naturligvis)
-
I tillegg funker ikke bygging til Azure. Dette pga at react mener memerArray må ligge i dependency på useEffect i memberList.. Denne er litt vrien. Må få memberlist til å rendre alle medlemmer, men uten at det går i loop...
-
Ryddet opp i alle komponenter og funksjoner
Fjernet console.log oppføringer. -
Ryddet opp alle api-oppkallinger til å bruke fetch.
-
Prøve å få lagt til en knapp for å slette medlem også.
07.03.2023 -12
- Forenklet api DBWrite. Istedenfor å sette const for alle verdier, så sendes alle verdier rett til db. Man bestemmer da i front-ende hvor mange verdier som lagres.
- Laget knapp for å slette medlem. Finner ikke noen måte å slette et document i cosmos db. Får bare markere som slettet i stedenfor. Sliter litt med queryen for å filtrere bort de som er merket slettet. Endret query til å filtrere på kun deleted = false. Den taklet ikke å filtrere hvis property ikke er definert Endret slette funksjonen til å også anonymisere document.
- Alle basic funksjonene er vel nå på plass.
- Startet med litt styling.
08.03.2023 -13
- Fortsatt med styling.
- Lage hamburgermeny for å vise innlogget/utlogget, samt knapp for å logge inn/ut. Fant en brukbar måte å gjøre dette på. Men tror jeg vil gjøre den om til at en modal kommer opp når hamburger trykkes.
14.03.2023 -14
- Flyttet hamburger funksjon inn i homepage.js. Dette gjorde det enklere å håndtere innlogging / utlogging.
15.03.2023 -15
-
Lagt til postnr i skjema.
-
Lagt til eksport av medlemmer til csv
Neste: lage en løsning som sender e-post med en link der bruker får lastet ned en pdf (faktura) (anonym link?) Må også legge til valg for om vedkommende vil betale via vipps eller e-post faktura.
28.03.2023 -16
- Har sendt inn søknad om vipps handel på nett m.m
- Fått delvis godkjent og kan begynne å teste.
- Installert Vipps-test app på telefonen min.
- Skal nå i første omgang teste med postman mot vipps sine apier for å se hvordan ting funker.
Testet med postman og det virker forholdsvis greit.
Neste blir å teste i app, samt fordype seg litt.
- Tenker å kjøre en agreement med initial charge.
- Må undersøke det med interval her. Kan man f.eks sette datoer?
- Sørge for at folk ikke blir belastet flere ganger samme år.
- Går an for app å hente alle agreements, f.eks til et array og så kan appen sjekke opp i mot kunde databasen
- Sette agreement-id til medlems id kanskje, samme med ordrenr (som jeg tror MÅ være med)
29.03.2023 -17
- Opprettet vippsfunctions.js Tenkt å putte alle vipps-funksjoner inn i denne som kan importeres og brukes fra andre components
- Lagde første funksjon der. get access token Denne for å starte en "sesjon" mot vipps.
- Men sliter med cors Problemer....
- Tror jeg må bruke egen api for å kalle opp vipps-apier. Dette vil antakeligvis løse cors problem pluss at jeg kan lagre keys på en sikker måte....
30.03.2023 -18
- Opprettet api Vipps.
- Litt trøbbel med å få ting til å funke, blant annet fordi funksjonen fetch måtte installeres OG den må importeres som require og ikke vha import inne i funksjonen i index.js. Måtte installere node-fetch versjon 2.0 vha npm install [email protected]
- Funker når jeg kjører lokalt, men ikke via Azure. Antar dette er fordi dette er en server-less løsning og jeg ikke får installert node-fetch der. Feilmelding i app-insights tilsier også dette. Mulig det går an å gjøre dette på en annen måte...?
- Hadde jo installert node-fetch på rota av prosjektet. Etter jeg installerte node-fetch i api-katalogen og kjørte commit, så fungerte det i azure også. Litt rart at det funka lokalt før jeg installerte i api-katalogen......
- Flyttet vipps client id og secret m.m til application settings.
- Begynt med å lage funksjoner i api for de forskjellige vipps-funksjonene. draft agreement with initian charge.
31.03.2023 -19
-
Opprettet vipps funksjon for å oprette avtale. Ikke fått helt til dette. Usikker om headers sendes korrekt..
Manglet teksten bearer foran accesstoken!!! -
Foreløpig er følgende api-funksjoner operative: get-access-token : Denne kjøres for alle api-kall (vipps) for å hente accesstoken create-agreement (med initiell belastning) : For å opprette en avtale på et medlem, samt ta betalt for inneværende år. get-agreement : For å hente status og info om avtale get-charge : For å hente status og historikk om belastninger
-
Forenklet kode. Bruke samme funksjon for alle vipps-api oppkall, bare med forskjellig data (body)
01.04.2023 -20
- Opprettet flere apier charge : For å belaste medlem for årets kontingent. update agreement : for å endre beløp eller stoppe agreement. NB: Ikke testet 100%
- Rensket opp litt i fetch-url for api mot vipps. Gjør det enklere å endre til produksjon når den tid kommer. Bare å endre en const i Vipps api (index.js)
- Neste blir nå å få på plass disse funksjonene på de faktiske medlemmene
Både på member-form, samt memberformadmin.
Pluss at medlemmer må kunne logge på og endre seg selv.
Og legge til noe lagring til database
- På medlemmer må man lagre agreementid Tror det er nok for da kan man hente resten fra vipps
- Lagre beløp, slik at man enkelt kan endre kontingenten.
02.04.2023 -21
- Startet prosess med å få implementert vipps funksjoner ved registrering av medlemmer Startet med memberForm. Problemer med å hente ut memberid, da jeg sliter med å sende dette tilbake Må enten gjøre om på hvordan data hentes fra response, eller opprette member-id fra memberform...
03.04.2023 -22
- Lagt til spørsmål om vipps eller e-post på memberform (må gjøre det samme på memberformadmin) Må også legge til funksjon som sjekker hva som er valgt når det skal sendes faktura
- Prøvde å lage til funksjon som sender vipps-krav (avtale med initiell krav) når registrert. Det fungerer, men må få tak i url og videresende bruker til denne. Må nok vente på svar fra api her. Kanskje bruke samme metode som i vippsfunctions med .then osv.
- Fikset dette med å legge til await på fetch i vippsfunctions.js
- Fikk hentet ut confirmation url fra api-responsen. Litt usikker på hvordan jeg best skal håndtere dette i etterkant. Prøvde først med å åpne ekstern link i iframe i en modal. Men når vipps-siden er ferdig eller avbrytes vil vipps redirecte til bdmi-hovedsiden (inni iframe og modal). Kanskje det finnes en funksjon å bruke som lytter på når iframe bytter nettside?
04.04.2023 -23
- Ide for prosess ved vipps: redirecte eksisterende vindu til vipps. Når vipps er ferdig, vil den åpne hovedsiden igjen. Bruke localstorage til å lagre bruker som pålogget, slik at vedkommende kommer rett inn på sin bruker.
05.04.2023 -24
-
Prøver å gjennomføre ideen fra i går. Endret funksjonen som sjekker om godkjent bruker, slik at den gir tilbakemelding om bruker eksisterer og hva slags rolle den har. Så er det en if statement som bestemmer hvilken return som kjøres. ut ifra hvilken rolle man har. La også til i funksjonen for å registrere medlem at man blir lagret i localstorage. Opprette ny komponent for redigering av seg selv som medlem.
Funker delvis. Bruker blir pålogget og det huskes i local-storage Men har glemt å endre hvordan vipps-linken åpnes. Denne må endres fra iframe, til en redirect eller lignende Må også endre komponenten for å redigere seg selv (MemberFormUser). Denne åpnes uten data.
30.04.2023 -25
-
Oppstart igjen etter lengre tids opphold.'
-
Endret til å redirecte til vipps confirmation url NB: Kunne ikke bruke usestate til dette, da denne ikke oppdatere raskt nok. Altså setConfirmationUrl rekker ikke å gjøre jobben før neste linje kjøres, så hentet url direkte fra api-response. Ved første test, så det greit ut, men bildet forsvant og vipps redirectet tilbake til hjemmeside før uten at det kom opp i app Dette kan være pga at avtale allerede var gjort.... ! må få laget en funksjon for å si opp avtale.
-
Funker ikke med logg inn (ihvertfall ikke for ikke-admins). E-post blir ikke sendt. Dette pga at programmet kun sendte e-post hvis admin eller superbruker. Endret dette og da sendes e-post
-
Men får feilmelding på firstname. Må sjekke kode... Feiler fordi data er ikke lest inn i array fra readGivenMember. Årsaken ser ut til å være at funksjonen trenger db-id og jeg har oppgitt bruker-epost til funksjonen.... Fikset dette Problem med at usestate kjøres konstant.' Løste dette ved å bruke useEffect.
Må få lagt til litt på memberform og memberadmin form......
07.06.2023 -26
- Fortsetter på problemet med memberform som ikke får memberid og dermed ikke får lest ut rett medlem fra db Forsøker å skrive om homepage.js fordi jeg har brukt usestate helt uten grunn her... Var visst ikke helt uten grunn. Trengs for å trigge if-setningen for hva som rendres i homepage. Samt at det er en useState verdi jeg må sende til underkomponenten via props for at det skal funke. Måtte også kjøre en page refresh for å unngå en feil i console etter innlogging.
- Kommenterte ut det meste som har med vipps å gjøre. Tanken er at det i første omgang er viktigst å komme igang og få registrert masse medlemmer.
- Tok bort valg for å sette om man vil betale via e-post eller vipps, siden det nå i første omgang kun blir vipps.
- Prøver å få pusha til azure, men må rydde opp i en del ubrukte variabler og funksjoner....
- Neste: Funksjon for å sende ut e-post til alle med info om betaling. NB: begrense antall, slik at vi ikke når grensen til sendgrid. Sende dette kun til de som har status registrert Funksjon for å resette alle medlemmer til registrert istedenfor aktiv Kanskje funksjon for å sende ut informasjon til alle aktive og evt registrerte medlemmer. Tekstboks pluss pdf? Sjekk om enkelt å importere fra excel rett i cosmos via azure, evt lage funksjon i app for dette.
08.06.2023 -27
- Laget funksjon for å resette status for alle medlemmer.
- Ryddet opp i id-felt. Var brukt både id og memberid. Endret til KUN å bruke id.
- Neste Fortsette fra i går....
14.06.2023 -28
- Oppgraderte Node js versjon for azure-funksjonene bdmimember (cosmos) og bdmisendmail til versjon 18 via application settings. Resource group bdmimember. App funker fremdeles.
- Laget funksjon for å sende epost til alle, kun registrerte eller kun aktive medlemmer. Form med tittel og body som må fylles ut i tillegg til å velge hvilke medlemmer (alle, aktive, registrerte) Fungerer, men formatteringen må gjøres noe med. Linjeskift blir ikke med blant annet. Kanskje også se på å få sendt en pdf?
15.06.2023 -29
-
Endret sendmail api til å sende KUN plain text. Da kom linjeskift på plass. Hvis ønske om html, må jeg nok legge til i body der det skal være linjeskift. Kan også da lage en en litt mer avansert editor hvis behov.
-
Forsøker på å få til mulighet for å sende fil-vedlegg. Tenkte først å lage en funksjon for å lagre fil på server og hente denne i send e-post api. Men viser seg litt vanskelig å få lagre på serveren. Prøver nå istedet å få til en løsning med FileStack, en gratis online tjeneste for å laste opp filer, som sendgrid api'en kan hente via url. Kjørte npm install -save filestack-react For å bruke url, så kreves en modul request, så denne må også installeres npm install request
Det ble suksess etter litt om og men, som vanlig.
07.07.2023 -30
-
Oppdaget to problemer i kode i forbindelse med epost-sending Den nye funksjonen med å sende masse-epost har ødelagt funksjonen for å sende epost i forbindelse med registrering og innlogging Årsak er nok at innlogging/registrering sender e-post adresse i en string, mens masse-epost sender i et array. Løste dette ved å legge til [] på variabel som sendes til api Annet problem er i forbindelse med masse utsending. Å endre fra Alle, Registrerte og Aktive funker ikke. Og må ordne slik at default verdi er valgt. Løste med å endre input type value og legge til checked, samt sette standard i useState setning.
-
Må prøve å få til mulighet for å legge til familiemedlemmer Som et underdokument i db Må kanskje ha et felt i db for årlig sum, som baserer seg på antall medlemmer. Ikke påkrevd e-post og telefonnummer
Startet litt på dette. Lagt til rette for en ractModal i MemberFormUser.js, samt opprettet Component FamilyMembers.js. Usikker på fremgangsmetode her, men hadde vært greit å kunne gjenbruke en komponent siden samme skal jo gjøres i MemberFormAdmin Hjelpe-artikkel: https://www.freecodecamp.org/news/build-dynamic-forms-in-react/ Sende variabler (props): https://www.freecodecamp.org/news/pass-data-between-components-in-react/
10.07.2023 -31
- Fortsatte på det med registrering av familiemedlemmer.
- Registrering av nye er OK.
- Må få ordnet slik at man også ser de som allerede er registrert.
- Kanskje mellomlagre i et array og lagre alt når man trykker på lagre/lukk
- NB: Må også få ordnet slik at prisen hovedmedlemmet skal betale oppdateres Evt. en teller for antall medlemmer.
- Fått lagt til medlems-data (familiemedlemmer) konvertert til et array slik at jeg kan bruke map funksjonen.
11.07.2023 -32
- Fått fikset registrering av familiemedlemmer.
14.07.2023 -33
- Lagt til funksjonen FamilyMembers i memberforadmin også. testet ok.
- Fikset csv eksport til å også ta med familiemedlemmer
20.12.2023 -34
- Startet opp igjen etter lang tids avbrudd.
- Lagt på igjen valg for om man vil betale via vipps eller e-post. Måtte rette opp html-koden for å få til at endring faktisk vistes
- Lagt til tekst på medlemssiden (pålogget) som informerer om abb er aktivt eller ikke og knapp for å aktivere eller deaktivere. Prisen vil også stå i knappen for aktivering
- Lagt til summering av pris, hentes fra to konstanter (pris hovedmedlem og pris familiemedlem) og regner ut basert på antall registrerte familiemedlemmer pluss hovedmedlem
- Kjørt push til github
21.12.2023 -35
- Fortsatte med vipps.
- Laget funksjon i memberformsuser for vipps aktivering av abb med initiell betaling.
- Laget funksjon som sender e-post med betalingsinfo hvis ikke vipps.
- Laget funksjon for å deaktivere vipps abb
- Laget også funksjon som sjekker om vipps abb er aktivt.
- Begynt å lage funksjon for å oppdatere vipps-avtale evt. sende ny betalingsinfo på e-post hvis endringer på antall familiemedlemmer. Lugger litt.... Ser ut til å oppdatere abb OK. Synes det var litt rart at sluttbruker ikke må godkjenne.... Gjenstår å se på julaften om ekstra-beløpet belastes eller ikke.... Må se mer på funksjon for ekstra-betaling ved e-post. Da jeg pr i dag ikke lagrer opprinnelig beløp i databasen til å sammenligne med...
- Kjørt commit
27.12.2023 -36
- Laget funksjon calculateFamily for kalkulere antall familiemedlemmer og prisen Denne funksjonen kjøres fra writenewmember og updatemember funksjon og skriver dette til database.
- Skrevet om MemberFormUser i forhold til priskalkulering.
- Tenker lage en gjenbrukbar funksjon for å sjekke vipps-betalings status og sette medlems-status i henhold til dette. Sjekke om man bare kan bruke vipps agreement status...
29.12.2023 -37
-
Sett mer på prisendrings-funksjonen ved vipps. Tror den skal være OK nå. Må nok gjøre noe med e-post også.
-
Endret idempotency key til å være memberid + dagens dato-tidspunkt.
-
Opprettet funksjon i generalFunctions for å legge til betaling (addPayment). Neste blir å bruke denne når admin legger inn betaling og setter medlem aktiv. Samt når det sjekkes om vipps-betaling er gjennomført? Eller skal jeg her bare bruke data fra Vipps i hvert tilfelle. Lurer på om api til vipps er lagt opp med begrensninger etter å hente mange charges.... Må sjekkes mer.
Kjørte commit.
30.12.2023 -38
- Lagt til Charges component. For å liste opp og registrere manuelle innbetalinger.
- Lag til at vipps-abb må deaktiveres før man sletter seg selv som medlem.
- Lagt til vippsfunksjoner for hver vipps operasjon. Og endret de fleste vipps-oppkall til å bruke disse.
- Lagt til litt feil-håndtering. Presenterer feilmelding til bruker hvis feil.
- Laget litt kortere tilfeldig tall for medlemsid.
- La til alternativ idemptency key hvis konflikt. Slik at hvis en har deaktivert vipps-avtale, så kan man aktivere ny.
- Startet med å se på multiple rendering som forårsaker multiple api-oppkall. Først i MemberFormUser. Flyttet sjekk av vipps-abb-status til eksisterende useEffect. Oppfører seg litt rart. Ved refrisk av nettleser, leser første del av useEffect kun inn 2 objekt-nøkler og resten får da ikke kjørt siden den mangler info (agreementid). Hvis jeg gjør endringer i koden og lagrer (og programmet da refrisker siden), så funker det som det skal.... I useEffect "funksjonen", setter jeg formInputs fra det som leses fra DB (member-array). Deretter henter jeg data fra formInputs. Endret til å videre hente data fra member-arrayet og da fungerte det. Det er altså en forsinkelse i setFormInputs.
- Laget en funksjon i vippsfunctions.js som henter alle charges på en agreement og summerer opp for hver enkelt status pluss total og gir status om penger utestående.
- Prøvde å legge til betalingsstaus i MemberFormUser, men ser ikke ut til å funke på første forsøk...
- commit. To be continued....
31.12.2023 -39
- Tror jeg løste betalingsstatus i MemberFormUser.
- Begynt på å legge til liste over vipps-innbetalinger i MemberList. Slik at admins kan se og evt. kansellere/refundere Sliter litt med multiple rendering. Må nok bruke useEffect her tenker jeg.... Bygde om VippsCharge som opprinnelig ble brukt fra MemberFormUser, da denne ikke brukes mer der. Denne får agreementid og henter selv alle charges og lister dem opp med en knapp, som enten sier refunder, kanseller eller ingenting. Har opprettet funksjonen som starter når denne knapp trykkes, men ikke laget funksjonaliteten enda.
- Commit.
04.01.2024 -40
- Opprettet refund og cancel i egen api.
- Opprettet vippsRefundCharge og vippsCancelCharge i vippsfunctions.js
- Kalt opp refunder funksjon fra VippsCharge. Ikke komplett testet.
- Kalt opp kanseller funksjon også, ikke testet i det hele tatt.
- Lagt til Vipps agreement status i VippsCharges
- Noe har blitt ødelagt her.. Når jeg oppdaterer abb og som medfører ekstrakostnad, blir ikke dette lagt inn som ekstra belastning. Må se på dette i sammenheng med advarsel om at når man oppdaterer abb, så blir det dyrere.
- Commit.
05.01.2024 -41
- Endret cancel-charge funksjonen i vipps-apien min. Manglet en / i url....
- Rettet opp i updateSubscription i MemberFormUser.js VippsAmountOld var brukt useRef på og da blir det til et objekt der verdien ligger i vippsAmountOld.current.
- Endret litt på vippsfunctions.js funksjonene cancel charge og stop og update agreement, gir ikke response hvis OK. Endret derfor til at hvis ikke noe resons fra vipps, returneres {status: "succeded"}, hvis ikke returneres responsen fra vipps.
- La til ekstra komponent i MemberList som sjekker om det finnes vippsagreementid i database på medlem og kun laster VippsCharge hvis så er tilfelle. Endret på useEffect-setningen i VippsCharges slik at data ikke forsøkes lastes før komponenten er mountet. Fikk en feilmeling i console om minne-lekkasje hvis ikke.
- Kjørte commit.
10.01.2024 -42
- Lagt til tekst i varsel ved oppdatering av vipps. Sier nytt årsbeløp og evt ekstra belastning.
- Flyttet funksjon for å sende epost hvis endring av abb fra memberformuser til FamilyMembers. Noe klønete opplegg, men det funker.
- Kjørte commit
12.01.2024 -43
- Lagt til funksjon i MemberFormAdmin som kontrollerer status på alle vipps agreements og oppdatere member status i database deretter.
- Gjorde om litt på det som ble endret 05.01.2023. i useEffect setningen tok jeg bort ene mounted forutsetningen for å få med vipps status Da kommer advarsel om minnelekasje tilbake når jeg lukker medlem..... Får bare leve med dette intil videre...
- Lagt til knapp i MemberFormAdmin for å avslutte vippsabb. Bør kanskje kun vise knappen hvis det finnes vipps agreement?
- Kjørte commit
13.01.2024 -44
- Lagt til Vipps design på knapper.
14.01.2024 -45
- Startet å lage funksjon for å belaste vipps-avtaler Ser ut til å fungere Lagt til en oppsummering for antall vellykkede og feilede belastninger / eposter
- Lagt til en api for å skrive logg over disse innkrevingene.
- Og skriver nå logg til database med medlemsinfo og status.
- Kjørte commit.
- Endre HomePage litt for å minske antall DBRead. Satte opp en useEffect.
- Sjekket sikkerhet. Det er IKKE mulig å bare endre rolle til admin for å få adminrolle. MEN det er mulig å endre e-post adresse til en med admin-rettigheter og da får man admin!!!
- Kjørte commit.
15.01.2024 -46
- Skrev om chargeMembers til også å inneholde separat funksjon for å skrive logg til db Først hadde jeg lagt dette rett i funksjonen for å ta betalt, men siden jeg ønsker å gjenbruke funksjonen så.....
- Kaller opp denne funksjonen også når vipps-app opprettes, oppdateres eller slettes.
- Så nå skrives det logg i db når vippsavtale opprettes, oppdateres og avsluttes, samt alle belastninger som gjøres.
- Kjørte commit.
- Skrev om HomePage litt for å få inn token i innlogging. Foreløpig sjekker den om token er mindre enn ett døgn for å slippe inn, Kan øke denne til mer når jeg ser det funker.
- Kjørte commit.
16.01.2024 -47
- Oppsummert litt medlemstall og lagt til i MemberList.
- Kjørte commit
17.01.2024 -48
- Lagt til document.reload i memberlist ved funksjonen for å deaktivere abb.
- Endret writeNewMember og updateMember til å gjøre e-post adresse til lowercase
- endret prompt i homepage login slik at e-post adresse blir omgjort til lowercase. Begge disse endringene er for å sørge for at man får treff på e-post adresse uansett om man bruker små eller store bokstaver.
- Kjørte commit.
19.01.2024 -49
- Endret antall dager vipps skal prøve å belaste kunde til 7 (MemberFormUser.js og chargemembers.js)
- Endret levetid på innloggingslevetid til 7 dager (Homepage)
- Endret MemberForm slik at det også der skrives token til database og localstorage for enklere login
- Rettet feil i checkAllVippsAgreements. Denne kaller opp en vipps funksjon som henter alle aktive abb. Deretter sjekker den status på abb. Når abb da er ikke aktiv, så blir det krøll. Endret derfor if-setningen til å bare sjekke om agreement ble listet opp.(siden den bare lister opp aktive)
- Endret funskjonen for refundering til å returnere "success" hvis ingen status-tekst. Da Vipps ikke returnerer tekst hvis OK.
- Commit.
23.01.2024 -50
- Oppdaget problem på enkelte nettlesere (vha Guri) Når får beskjed om å skrive inn kode sendt på e-post, kan det skje at denne dialog-boksen forsvinner når man går inn på annen app på tlf, eller bytter fane i nettleser. Lagt inn en while setning som looper prompt så lenge promptet returnerer "" eller null.
- Commit for å teste på android.
- Funket dårlig. Må lage annen dialog-boks....
- Laget en ny component loginPrompt, som tar inn kode det skal sjekkes mot pluss medlemsdata komponenten presenterer inputboks hvor bruker taster tilsendt kode. hvis kode samsvarer, blir kunde lagret, evt. hvis dette er fra pålogging blir kundens token oppdatert og innlogging lagret i localstorage.
- Ikke klart å gjøre det samme i HomePage for innlogging.....
- Commit
- Endret noe tekst i MemberFormUser som sier litt mer om vipps-avtalen
- Fikk endret Homepage login også til å fungere med egen dialogboks.
- Commit.
- Minsket størrelse på logo fra max-width 200 til 150. Dette for å få med mer innhold på mobil uten å måtte scrolle.
- Commit
- Ryddet opp litt i MemberFormUser, tatt bort noe unødvendig kode.
- Commit (uten sync)
- Lagt til funksjon som kan sende e-post til medlem registrert av admin'
- Tatt bort status i MemberFormAdmin skjema. Setter uansett ikke et medlem aktivt før man registrerer betaling tenker jeg.
- Lagt til funksjon i FamilyMembers og ved oppdatering av medlem Hvis ikke endring i pris, så sendes det ikke nå e-post til medlem om endringene.
- Commit (uten sync)
- Sjekket litt rundt problem med at e-post fra løsningen som sendes til f.eks zmmaskin.no eller dingseboms.no er veldig forsinket. Dette er da domeneshop e-post. Samme som det egentlig sendes fra... bevardovrefjell.no er også i domeneshop. Har nå lagt til i eksisterende spf føring i dns sonefila til bevardovrefjell.no. include:sendgrid.net ref: https://mxtoolbox.com/c/outboundemailsources?public=SendGrid
- Sync
24.01.2024 -51
- Lagt inn tekst med info og qrkode om hvordan man kan gi støtte til foreningen i HomePage
- Endret de nye dialogboksene jeg laget for å taste inn tilsendt kode slik at skjema aktiveres ved enter
- Commit og sync
25.01.2024 -52
- Opprettet staging environment.
- Opprettet en staging db
- Oppdatert staging apier til å gå på staging db.
- Oppdatert application settings for production til å gå på production api-nøkler og secrets mm for vipps. NB: Må skrive til dem for å få funksjonen recurring aktivert. Dette ble gjort idag.
- commit
26.01.2024 -53
Staging:
-
Endret functions.json i db-apiene slik at de bruker env variabel. På denne måten kan jeg ha lik kode i staging og main, men sette forskjellige variabler i config(local.settings for lokal testing)
-
La til denne variabel i local settings og i azure, både for staging og main.
-
Kjørte commit på staging
-
deretter merge main fra staging. local.settings i api ble også merget.......
-
La til funksjon i app.js som legger til teksten STAGING når ikke produksjon. Dette for at jeg ser om jeg er i staging eller main.
-
Commit.
-
Lagt til ekstra status tekst hvis kunde har en aktiv vipps-avtale, men endrer til å betale via e-post.
-
Commit
-
Og Merge.
-
Skal teste ut Sparkpost i stedenfor sendgrid. Denne tar 500 sendinger pr måned uten kostnad.
-
Opprettet bruker for BevarDovrefjell på [email protected].
-
npm install sparkpost i api mappen
-
Satt opp ny api vha azure static web apps create http function SparkPost Får ikke særlig tilbakemelding i min api. Forsøkt via postman. Ser mer info der. Manglet rett verifisering av domenet bevardovrefjell.no. Testet ok mot [email protected] Testet ok mot [email protected]. Får ikke til via egen api. Fikk sendt en gang, usikker hva som var annerledes da. Har etterhvert fått inn feilmelding og sier unconfigured sending domain <bevardovrefjell.no>..... Får prøve igjen i morgen....
27.01.2024 -54
-
Fortsatte testing av Sparkpost. Måtte reverifisere domenet..... Da ser det ut til å fungere.
-
Fortsetter å utvikle denne e-post slik at det fungerer på samme vis som sendgrid med å kunne legge til mange adresser. Samt må få lagt til pdf også etterhvert.
Står igjen å legge til fil-vedlegg og kanskje endre (ihvertfall teste) EmailSending komponenten. -
Commit
-
Forsøker å legge til fil-vedlegg, men sliter veldig. Får ingen tilbakemelding i api om hva som går galt. E-post med vedlegg sendes ikke. Hvis jeg i attachment array har et objekt med data: "tilfeldige tegn", så ser det ut til å funke. Så variabelen textBuffered har tydeligvis en feil.. Får ikke lest den ut i context.log da det er noe forsinkelse og jeg ikke får til å vente på den,.....
28.01.2024 -55
- Problemet for å få med vedlegg, var å legge til toString('base64').
- Har ikke klart å få logg til å fungere, da det tydeligvis ikke ventes på svar.... Det driter jeg i nå. Ikke kritisk dette.
- Commit.
30.01.2024 -56
- Lagt til dato-tid i id når det skrives logg for vipps i db.
- commit.
- Fjernet test epost funksjon fra MemberFormAdmin
- Fjernet STAGING tekst hvis ikke production. Fungerte uansett ikke. viste kun staging hvis lokalt.
- Justert heading tekster i MemberList for å få med mer tekst i navne-kolonne.
- Økt max-width i homepagetopdiv til 1024.
- Lagt til css for tabell i MemberList slik at tekst ikke wrappes (hopper til ny linje)
31.01.2024 -56
- Litt usikker rundt hele merge-prosessen. Konkludert foreløpig med at jeg fortsetter med staging branch slik jeg har gjort.
- Flyttet logg fra repo til wiki på github. Skal kunne klones lokalt.
01.02.2024 -57
- Fjernet knappen for "start aktivering på nytt" hvis vipps agreement status er PENDING.
- Commit
- La til sjekk i activatesubscription funksjon i MemberFormUser som sjekker om Vipps agreement allerede er aktivert. I såfall gis bruker beskjed om dette og side lastes på nytt. I tillegg lagt til en ekstra sjekk i forbondelse med idempotencykey slik at det IKKE settes ny key hvis status på agreement er PENDING. I teorien skal man da kunne "fortsette" der man slapp.
- Fjernet igjen knappen for å kunne fortsette, da dette ikke funker.
- Commit.
- La til tekst på MemberFormUser som sier Sjekker Vipps status... som står til vippsAgreementStatus har fått en verdi. Dette for å sikre at man ikke trykker på aktiver en gang til hvis tregt nett.
- Satte vippsAgreementStatus til undefined hvis ikke agreementid eksisterer. Dette for at det ikke skal stå Sjekker Vipps status... i evigheten hvis ikke aktivert enda... Også i MemberFormUser
- Sjekker om vippsagreementstatus er ACTIVE før man evt kaller opp deActivateSubscribtion i MemberFormUser under deleteMember.
- Flere commits underveis.
- Merger til Main nå og tar en liten test før det får være godt nok til lansering på Villreinkvelden i morra.
19.03.2024 -58
- Lastet opp json av tidligere medlemmer. Fikk problem med feltene zipcode, phone og deleted pga at disse må stå med "" rundt. Fikset dette manuelt i db
- Viser set også en bug i min kode. Hvis kunde ligger inne uten telefonnr, så vil funksjonen checkifmemberexist "finne" feil medlem, da den vil stoppe på første medlem uten registrert telefonnr ved f.eks submitlogin i homepage som kaller opp funksjonen uten å oppgi phone som søkeref. Fikset med å legge til phonenumber !== '' i if-setningen.
- Kjørte commit på main
03.09.2024 -59
- Flyttet kode fra frontend til backend. Api returnerer mindre data, samt oppkall av api inneholder mindre informasjon. Gjelder funksjonen checkIfMemberExist som kjører når man prøver å logge inn. random kode generator kjøres nå også i backend basert på en felles algoritme som også ligger i frontend. Slipper da å utveksle denne via api Mer må flyttes etterhvert...
15.01.2025 -60
- Lagt til igjen vipps api. Men la til et oppkall en funksjon i api som sjekker om gitt medlem faktisk har gitt mobilnr. Hvis ikke skrives dette i context.log, ellers ingen feilmelding. Endret random kode funksjon slik at denne fungerer igjen (problem var at januar skrives som måned 0 av javascript og jeg brukte måned-tall for deler av koden. La inn igjen valg for vipps i memberform.
TODO:
NB: Ved belastning av årets kontingent: Er vel idag ikke noe funksjon som sjekker om kunde nylig har betalt på annen måte eller om det er et nytt medlem som da allerede har betalt årets kontingent... hvis vi kjører belastning første dag i året, så er vel ikke dette noe problem. Men må nok lage en bedre løsning rundt dette. Lagre i database hvilket år det har blitt betalt for. Når kjøre belastning eller kanskje heller når nullstille status, sjekke om dette samsvarer med nytt år.
NB: Nå har jeg to branch. main og staging
Vipps: Ordne funksjon for å sende kvittering til kunde(i vipps)
Bør kanskje også lage kvittering på e-post?
Tar dette hvis det dukker opp spørsmål....
Vurdere om admins skal kunne legge til familiemedlemmer og dermed oppdatere vipps-avtale og belaste ekstra.
Tror ikke det er i henhold og så lurt. Ved registrering/endring av admin bør medlem få e-post med informasjon om å gå inn og aktivere/oppdatere vipps-avtale selv.
Gå gjennom hele app for å prøve å unngå multiple rendering
https://www.developerway.com/posts/react-re-renders-guide
https://www.linkedin.com/pulse/avoid-unnecessary-re-renders-reactjs-christian-zanchetta
Tips for senere:
- Autentisering (pluss database): https://dev.to/c_arnab/serverless-in-azure-using-static-web-apps-functions-and-cosmos-db-506j
Test mobilnr: 99576014