🚧 Fetching av feilmeldinger fra DB til frontend i form av Promises

WIP: klarer ikke konvertere Promise<any> til Feilmelding[]

Co-authored-by: Sindre Kjelsrud <sindre.kjelsrud@nav.no>
This commit is contained in:
Markus Johansen 2023-07-24 15:13:04 +02:00
parent eb470e3c9e
commit 02f999c56b
7 changed files with 97 additions and 66 deletions

View file

@ -14,6 +14,7 @@ import io.ktor.server.request.*
import no.nav.helse.sprik.Test import no.nav.helse.sprik.Test
import no.nav.helse.sprik.db.FeilmeldingRepository import no.nav.helse.sprik.db.FeilmeldingRepository
import no.nav.helse.sprik.modell.Feilmelding import no.nav.helse.sprik.modell.Feilmelding
import java.time.LocalDateTime
fun configureRouting(): ApplicationEngine = embeddedServer(CIO, applicationEngineEnvironment { fun configureRouting(): ApplicationEngine = embeddedServer(CIO, applicationEngineEnvironment {
//Repositories for handlinger mot database: //Repositories for handlinger mot database:
@ -57,8 +58,9 @@ fun configureRouting(): ApplicationEngine = embeddedServer(CIO, applicationEngin
feilmeldingRepository.lagre(feilmelding) feilmeldingRepository.lagre(feilmelding)
call.respond(status = HttpStatusCode.Created, message = "Feilmelding motatt og sendt til database") call.respond(status = HttpStatusCode.Created, message = "Feilmelding motatt og sendt til database")
} }
get("/api/hentfeil"){ get("/api/hentallefeil"){
call.respond(status = HttpStatusCode.Created, message = "Prøver å hente feil fra DB") val testMelding = feilmeldingRepository.hentAlleFeilmeldinger()
call.respond(status = HttpStatusCode.Created, message = testMelding)
} }
} }
} }

View file

@ -1,26 +1,34 @@
import no.nav.helse.sprik.Application import no.nav.helse.sprik.Application
import no.nav.helse.sprik.configureFlyway import no.nav.helse.sprik.configureFlyway
import no.nav.helse.sprik.db.Database import no.nav.helse.sprik.db.Database
// import no.nav.helse.sprik.db.FeilmeldingRepository import no.nav.helse.sprik.db.FeilmeldingRepository
import no.nav.helse.sprik.dbconfig import no.nav.helse.sprik.dbconfig
// import no.nav.helse.sprik.modell.Feilmelding import no.nav.helse.sprik.modell.Feilmelding
// import java.time.LocalDateTime import java.time.LocalDateTime
// import javax.sql.DataSource import javax.sql.DataSource
import org.jetbrains.exposed.sql.Database as ExposedDatabase
fun main() { fun main() {
val db = Database(dbconfig()).configureFlyway() val db = Database(dbconfig()).configureFlyway()
val app = Application(db) val app = Application(db)
ExposedDatabase.connect(db.dataSource)
// oppretteMockData(db.dataSource) // WIP
oppretteMockData(db.dataSource) // WIP
app.startBlocking() app.startBlocking()
} }
/* WIP
private fun oppretteMockData(dataSource: DataSource) { private fun oppretteMockData(dataSource: DataSource) {
//må lage connection med database først!
val feilmeldingRepository = FeilmeldingRepository() val feilmeldingRepository = FeilmeldingRepository()
feilmeldingRepository.lagre(Feilmelding("Tittel Test", "Beskrivelse Test", LocalDateTime.of(2023, 1, 1, 8, 0, 0))) feilmeldingRepository.lagre(Feilmelding("Tittel Test1", "Beskrivelse Test1", LocalDateTime.of(2023, 1, 1, 8, 0, 0)))
feilmeldingRepository.lagre(Feilmelding("Tittel Test2", "Beskrivelse Test2", LocalDateTime.of(2023, 1, 1, 8, 0, 0)))
feilmeldingRepository.lagre(Feilmelding("Tittel Test3", "Beskrivelse Test3", LocalDateTime.of(2023, 1, 1, 8, 0, 0)))
feilmeldingRepository.lagre(Feilmelding("Tittel Test4", "Beskrivelse Test4", LocalDateTime.of(2023, 1, 1, 8, 0, 0)))
feilmeldingRepository.lagre(Feilmelding("Tittel Test5", "Beskrivelse Test5", LocalDateTime.of(2023, 1, 1, 8, 0, 0)))
feilmeldingRepository.lagre(Feilmelding("Tittel Test6", "Beskrivelse Test6", LocalDateTime.of(2023, 1, 1, 8, 0, 0)))
} }
*/

View file

@ -1,53 +1,51 @@
import { data } from "autoprefixer";
import FeilCard from "./FeilCard" import FeilCard from "./FeilCard"
import useSWR from "swr" import useSWR from "swr"
import { backendURL } from "../const.ts"
import { Feilmelding, IFeilmelding } from "../interface.ts";
/** /**
* *
* @returns Komponent for returnering av konteiner med alle feilinnmeldingene. * @returns Komponent for returnering av konteiner med alle feilinnmeldingene.
*/ */
const fetcher = (url: RequestInfo | URL) => fetch(url).then(r => r.json()) // const fetcher = (url: RequestInfo | URL) => fetch(url).then(r => r.json())
const fetchFeil = () => { async function fetchAlleFeil() {
const {data, error, isLoading } = useSWR("/api/hentFeil", fetcher) // const {data, error, isLoading } = useSWR("/api/hentallefeil", fetcher)
if (error) return <div>failed to load</div> // if (error) return <div>fail</div>
if (isLoading) return <div>loader</div> // if (isLoading) return <div>loader</div>
return <div>hello {data.name}!</div> // return <div>hello {data.data}!</div>
try {
const response = await fetch(backendURL + "/api/hentallefeil", {
method: "GET",
headers: {
"Content-Type": "application/json"
},
})
.then((data) => data.json())
.then((feil) => {
return feil.map(jsonFeilmelding => new Feilmelding(jsonFeilmelding))
})
.catch((error) => {
console.log(error)
})
return response
} catch (error) {
console.log("error:", error);
} }
}
const printFeil = async () => {
const a = await fetchAlleFeil();
console.log("a:", a);
};
const CardsContainer = () => { const CardsContainer = () => {
const feilMeldinger: Feilmelding[] = [ const feilMeldinger: Feilmelding[] = []
{ printFeil()
tittel: "Mangel på hensyn til tariffoppgjør",
beskrivelse: "Det har vært ett tariffoppgjør og speil sier sykepengene må tilbakekreves, noe som er feil. (sier vi.. har ikke domenekunnskap)",
haster: false,
dato: new Date()
},
{
tittel: "Speil sier NAV må tilbakekreve sykepenger på feil grunnlag",
beskrivelse: "baluba",
haster: true,
dato: new Date()
},
{
tittel: "Feil A",
beskrivelse: "Lorem Ipsum",
haster: false,
dato: new Date()
},
{
tittel: "Feil B",
beskrivelse: "dolor",
haster: false,
dato: new Date()
},
{
tittel: "Håndkle på hue",
beskrivelse: "Bombastic side eye",
haster: true,
dato: new Date()
}
]
return( return(
<div> <div>
@ -57,14 +55,13 @@ const CardsContainer = () => {
key={feilMeldinger.indexOf(feilMelding)} key={feilMeldinger.indexOf(feilMelding)}
tittel={feilMelding.tittel} tittel={feilMelding.tittel}
beskrivelse={feilMelding.beskrivelse} beskrivelse={feilMelding.beskrivelse}
haster={feilMelding.haster} // haster={feilMelding.haster}
dato={new Date()} /> dato={new Date()} />
))} ))}
</div> </div>
<div> <div>
<br/> <br/>
<p>Forsøker å loade feil objekter her:</p> <p>Forsøker å loade feil objekter her:</p>
{fetchFeil()}
</div> </div>
</div> </div>

View file

@ -15,7 +15,7 @@ const TagBar = (props: TagBarInterface) => {
) )
} }
const FeilCard = (props: Feilmelding) => { const FeilCard = (props: IFeilmelding) => {
return ( return (
<ExpansionCard aria-label="tekst"> <ExpansionCard aria-label="tekst">
<ExpansionCard.Header> <ExpansionCard.Header>
@ -23,7 +23,7 @@ const FeilCard = (props: Feilmelding) => {
<ExpansionCard.Description> <ExpansionCard.Description>
{props.beskrivelse} {props.beskrivelse}
</ExpansionCard.Description> </ExpansionCard.Description>
<TagBar haster={props.haster}/> {/* <TagBar haster={props.haster}/> */}
</ExpansionCard.Header> </ExpansionCard.Header>
<ExpansionCard.Content> <ExpansionCard.Content>
Hællæ Hællæ

3
frontend/src/const.ts Normal file
View file

@ -0,0 +1,3 @@
export const backendURL = "http://localhost:8080"
// const backend = "https://helse-sprik.intern.dev.nav.no"

View file

@ -3,9 +3,28 @@
*/ */
interface Feilmelding { export interface IFeilmelding {
tittel: String, tittel: string,
beskrivelse: String beskrivelse: string
haster: boolean // haster: boolean
dato: Date dato: Date
} }
export class Feilmelding implements IFeilmelding {
tittel: string = "default tittel"
beskrivelse: string = "default beskrivelse"
dato: Date = new Date()
/**
* Typescript 2.1 syntax som lar deg sende inn et JSON object og mappe det til class.
* https://stackoverflow.com/questions/14142071/typescript-and-field-initializers
*/
public constructor(
fields: {
tittel: string,
beskrivelse: string,
dato: Date
}) {
if (fields) Object.assign(this, fields);
}
}

View file

@ -7,21 +7,23 @@ import { useState } from "react";
import BildeOpplastning from "../components/BildeOpplastning"; import BildeOpplastning from "../components/BildeOpplastning";
import Header from "../components/Header"; import Header from "../components/Header";
import { useNavigate } from "react-router-dom"; import { useNavigate } from "react-router-dom";
import { backendURL } from "../const";
export default function Feil() { export default function Feil() {
const [tittel, setTittel] = useState(""); const [tittel, setTittel] = useState("");
const [beskrivelse, setBeskrivelse] = useState(""); const [beskrivelse, setBeskrivelse] = useState("");
const url = "https://helse-sprik.intern.dev.nav.no"
//const url = "http://localhost:5174"
const handleSubmit = () => { const handleSubmit = () => {
axios.post(url + "/api/nyfeil",
{ const payload = {
tittel: tittel, tittel: tittel,
beskrivelse: beskrivelse, beskrivelse: beskrivelse,
dato: new Date().toISOString().replace('Z', '') dato: new Date().toISOString().replace('Z', '')
}, { }
console.log(payload);
axios.post(backendURL + "/api/nyfeil", payload, {
headers: { headers: {
'Content-Type': 'application/json' 'Content-Type': 'application/json'
} }