För en enkel och korrekt databasuppkoppling så hämtas PostgreSQL i lämplig version och installeras på datorn.
PostgreSQL finns att hämta här: https://www.postgresql.org/
DB_URL=jdbc:postgresql://localhost:5432/postgres DB_USER=[Ditt Användarnamn] DB_PASSWORD=[Ditt lösenord] SMTP_USER=order.cleanbookings@gmail.com SMTP_PASSWORD=vmno lpps vetz rtjh
KC_REALM= CB_REALM KC_CLIENT_ID= KC_CLIENT_NAME= CB_CLIENT KC_CLIENT_SECRET= KC_ADMIN_USERNAME=admin KC_ADMIN_PASSWORD=admin KC_ROLE_CUSTOMER_ID= KC_ROLE_CLEANER_ID= KC_ROLE_ADMIN_ID= KC_PRINCIPAL_ATTRIBUTE=preferred_username
KLARNA_USERNAME= KLARNA_PASSWORD=
Hämta och installera Docker/Docker Desktop från denna url: https://www.docker.com/products/docker-desktop/
Om installationen inte lyckas, vänligen referera till denna url för felsökning (PC, Windows): https://docs.docker.com/desktop/vm-vdi/
Hämta postman från följande URL: https://www.postman.com/
docker run -p 8080:8080 -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin quay.io/keycloak/keycloak:22.0.5 start-dev
Öppna ett nytt webbläsarfönster och kopiera in följande URL: http://localhost:8080/
När vi kommit till Client-sidan så hittar vi en blå knapp i mitten av sidan som heter Create client, Klicka på denna.
"client_admin"
"client_cleaner"
"client_customer"
KC_CLIENT_SECRET=[din kopierade secret]
Nu ska vi fortsätta med att starta Postman och hämta lite data för konfigurering på applikations-sidan.
I returen så kommer det nu finnas en position som heter "access_token", värdet av denna position ska vi kopiera för att kunna skicka följande anrop.
VIKTIGT! Denna access_token är bara giltig i 60 sekunder per default, så ha detta i åtanke när vi skickar de andra anropen.
Under fliken Auth så väljer vi Bearer token, och därefter klistrar vi in vår access_token från tidigare anrop.
I svaret på detta anrop så kommer vi få en lång rad objekt där varje objekt representerar en client i vår keycloak realm.
"id": "0fc8c1c1-7ca8-40b9-8655-bc3a48e95540", "clientId": "CB_CLIENT", "name": "name", "description": "description", "rootUrl": "http://localhost:8081", "adminUrl": "http://localhost:8081", "baseUrl": "http://localhost:8081", "surrogateAuthRequired": false, "enabled": true, "alwaysDisplayInConsole": true, "clientAuthenticatorType": "client-secret",
När vi hittat den så kopierar vi värdet på parametern "id" i samma objekt, i exemplet ovan skulle det då bli:
0fc8c1c1-7ca8-40b9-8655-bc3a48e95540
KC_CLIENT_ID=[Id från anrop]
Observera att du måste kopiera in det ID vi hämtade i föregående anrop i URL på detta anrop, byt ut placeholder till client-id.
"id": "c0c42f0d-76f0-46ca-9b8a-93a7e1c82407", "name": "client_cleaner", "description": "Cleaner", "composite": false, "clientRole": true, "containerId": "0fc8c1c1-7ca8-40b9-8655-bc3a48e95540"
c0c42f0d-76f0-46ca-9b8a-93a7e1c82407
KC_ROLE_CLEANER_ID=c0c42f0d-76f0-46ca-9b8a-93a7e1c82407
KC_ROLE_ADMIN_ID= KC_ROLE_CUSTOMER_ID=
Nu har vi konfigurerat vår Keycloak klient på båda sidor av tjänsten, nu kan vi gå vidare till Klarna config.
Skapa ett konto på https://playground.eu.portal.klarna.com/
username: PK1XXXX7_ed17XXXXXXXX password: 4osSiXXXXXXXXXUBi
KLARNA_USERNAME= [klarna api key username] KLARNA_PASSWORD= [klarna api key password]
"src/main/java/com/example/cleanbookingsbackend/service/DataInitialization/InitDataService.java"
Per default så är klassen utkommenterad, MEN(!) första gången vi startar vår applikation vill vi ha med denna klass.
Ta bort utkommenterings-kommandona (/* */) vid toppen och mot slutet på klassen så all utkommenterad kod blir tillgänglig..
OBS! Glöm inte att ha docker-containern igång med vår keycloak klient. Denna måste vara igång varje gång vi startar vårt program.
Kompilerar programmet som det ska så kan vi vid detta skede kommentera ut klassen igen, då har den fyllt sin funktion.
Denna controller hanterar administrativa uppgifter.
Hämta alla jobb i databasen.
Hämta alla kunder ur databasen, ändra specifik kund i databasen.
Hantera information om anställda, inklusive administratörer och städare
Ta bort kunder, städare eller administratörer
Denna controller fokuserar på städarnas roller och uppgifter.
Denna controller hanterar operationer relaterade till kunder.
Denna controller hanterar förfrågningar relaterade till GDPR.
En kund kan begära sin egen personliga data. Om kunden finns, skickas datan tillbaka, annars returneras ett felmeddelande.
Liknande som ovan, men för anställda. Anställda eller administratörer kan begära personliga data för en specifik anställd.
Denna controller hanterar olika aspekter av jobbhantering inom företaget.
En kund kan begära ett nytt städjobb. Om förfrågan är giltig, skapas jobbet och informationen returneras.
En administratör kan tilldela städare till specifika jobb.
En städare rapporterar att ett jobb är utfört.
En kund kan godkänna eller avslå ett utfört städjobb.
Om ett städjobb misslyckas, kan en administratör beordra att det görs om.
En kund kan avboka ett bokat städjobb.
Kunden eller anställda kan se en lista över städuppdrag baserat på deras status.
Kunden kan se sina bokade städuppdrag.
Kunden kan se sin historik av städuppdrag.
En administratör kan ta bort ett städjobb.
Visar alla jobb som är relaterade till en specifik kund.
Används för att uppdatera information om anställda eller kunder. De innehåller fält som namn, adress, telefonnummer, etc.
Används för att tilldela städare till ett specifikt jobb.
Hanterar inloggningsförfrågningar och svar. En förfrågan innehåller användarens e-post och lösenord, medan svaret kan innehålla information som användar-ID och tillgångstoken.
Används för att hantera kontaktformulär-förfrågningar från kunder, inklusive namn, e-post, ämne och meddelande.
För att skapa en ny anställd och få tillbaka ett svar med anställdas information.
Används för att begära ett nytt städjobb och få ett svar som bekräftar skapandet av jobbet.
Används för att svara med kundens data, vanligtvis efter en GDPR-förfrågan.
Datastruktur för att registrera en ny kund med personliga och kontaktuppgifter.
Används för att skicka kundinformation som svar på en förfrågan.
Används för att svara på en anställds autentiseringsförfrågan, innehåller identitets- och rollinformation.
Innehåller information om en anställd, vanligtvis som svar på en förfrågan.
Används för att godkänna eller avvisa ett utfört städjobb.
En datastruktur som beskriver ett städjobb, inklusive datum, typ och status.
Används för att skicka information om ett jobb, inklusive detaljer om vilka anställda som är involverade.
Används för att länka en användare (kund eller anställd) till ett specifikt jobb.
Används för att uppdatera en användares lösenord.
Används för att uppdatera en kunds personliga och kontaktinformation.
Detta undantag uppstår när systemet inte kan hitta en kund som efterfrågas. Till exempel, om du försöker titta på information om en kund som inte finns i systemet.
Detta inträffar när systemet inte hittar en efterfrågad anställd, till exempel vid försök att hämta information om en anställd som inte finns registrerad.
Detta undantag används när ett specifikt jobb eller uppdrag inte kan hittas i systemet.
Ett mer generellt undantag som kan användas för olika typer av data som inte kan hittas.
Detta undantag inträffar när betalningsinformation saknas, till exempel när systemet försöker hämta information om en betalning som inte finns.
Detta undantag uppstår när någon försöker registrera sig med ett personnummer som redan används av en annan användare i systemet.
Detta undantag används när någon försöker utföra en åtgärd som de inte har behörighet till, till exempel att ändra information som de inte har rätt att ändra.
Liksom med personnummer, detta undantag inträffar när någon försöker registrera ett användarnamn som redan är taget av någon annan.
Detta undantag uppstår när data som matas in inte uppfyller vissa kriterier eller regler som systemet kräver, till exempel om en e-postadress inte är formaterad korrekt.
Denna entitet representerar en anställd i systemet. Den innehåller information som anställdas ID, förnamn, efternamn, telefonnummer, roll (t.ex. städare, administratör) och e-postadress. Den har också en lista över jobb (städjobb) som den anställde är associerad med.
Denna entitet representerar ett städjobb. Den innehåller information som jobbets ID, datumet det bokades, vilken kund som bokade jobbet, vilka anställda som är tilldelade jobbet, jobbtypen (t.ex. grundstädning, fönsterputsning), en meddelande om jobbet, jobbets status (t.ex. öppet, tilldelat, avslutat) och betalningsinformation relaterad till jobbet.
Denna entitet representerar betalningsinformation för ett jobb. Den innehåller information som betalnings-ID, datum för utfärdande och förfallodatum, vilket jobb betalningen gäller, betalningens status (t.ex. fakturerad, betald, förfallen) och prisbeloppet.
Denna entitet representerar en privatkund i systemet. Den innehåller kundens ID, förnamn, efternamn, personnummer, kundtyp (privat eller företag), gatuadress, postnummer, stad, telefonnummer och e-postadress. Den har också en lista över jobb som kunden har bokat.
Detta repository hanterar operationer relaterade till "PrivateCustomerEntity" (privatkunder). Det inkluderar funktioner som att kontrollera om en kund finns baserat på e-postadress, hämta en kund baserat på e-postadress eller ID, och så vidare.
Detta repository hanterar operationer relaterade till "EmployeeEntity" (anställda). Det erbjuder funktioner för att hitta en anställd baserat på e-postadress, hämta alla anställda baserat på deras roll, kontrollera om en anställds e-postadress redan finns, och liknande.
Detta repository hanterar operationer relaterade till "JobEntity" (jobb eller uppdrag). Det inkluderar funktioner som att hitta jobb baserat på bokningsdatum och jobbtyp, hämta jobb för en specifik kund som inte är avslutade, hitta jobb för en kund baserat på olika statusar (öppna, avslutade, etc.), och hämta alla jobb för en specifik anställd.
Detta repository hanterar operationer relaterade till "PaymentEntity" (betalningar). Det innehåller funktioner för att hitta betalningar baserat på förfallodatum och betalningsstatus.
Den del av applikationen som hanterar olika operationer relaterade till kunder.
Metoden create används för att registrera en ny kund. Den validerar kundens inmatade data, såsom e-postadress och personnummer, och sparar den nya kunden i systemet om all information är giltig.
Metoden login hanterar inloggningsprocessen för kunder. Den kontrollerar om kunden finns och autentiserar dem med hjälp av deras e-postadress och lösenord.
Metoderna refresh och logout används för att hantera säkerhetstokens. refresh skapar nya säkerhetstokens baserat på en befintlig token, medan logout avaktiverar en befintlig token.
Metoden listAllCustomers används för att hämta en lista över alla kunder, men bara om den användare som begär informationen är en administratör.
Metoderna updateCustomerInfo och updateCustomerAdmin tillåter uppdatering av kundinformation. Den förstnämnda används av kunder för att uppdatera sin egen information, medan den sistnämnda används av administratörer för att uppdatera information om andra kunder.
Metoden updateCustomerPassword hanterar byte av lösenord för en kund.
Metoden deleteCustomer används för att ta bort en kunds information från systemet, men bara om användaren som utför borttagningen är en administratör.
Metoden contactUsForm används för att hantera kontaktformulärsförfrågningar från kunder.
En tjänst i en webbapplikation som hanterar olika operationer relaterade till anställda.
Metoden login hanterar inloggningsprocessen för anställda. Den verifierar att en anställd finns med den angivna e-postadressen och autentiserar sedan med ett lösenord.
Liksom med kunder, hanterar refresh och logout säkerhetstokens för anställda. refresh uppdaterar säkerhetstokens och logout inaktiverar dem.
Metoden createEmployeeRequest används för att registrera en ny anställd. Den validerar inmatade data och sparar den nya anställda i systemet.
Metoden getEmployeeById hämtar information om en specifik anställd baserat på deras ID.
Metoden getAllAvailableEmployees listar alla tillgängliga anställda för ett visst jobb, baserat på deras tilldelade uppgifter och tillgänglighet.
Metoderna getAllAdmins, getAllCleaners och getAllCleanersInfo tillhandahåller listor över anställda baserat på deras roller, som administratörer eller städare.
Metoden updateEmployee låter administratörer uppdatera information om anställda.
Metoden deleteCleaner används för att ta bort en städare från systemet, men endast om användaren som utför borttagningen är en administratör.
Metoden updateEmployeePassword används för att ändra en anställds lösenord.
En tjänst i en webbapplikation som hanterar olika operationer relaterade till jobb eller uppdrag.
Metoden createJobRequest används för att skapa en ny jobbförfrågan från en kund. Den validerar förfrågan och sparar informationen om jobbet i systemet. Den kan också integreras med en betalningstjänst (som Klarna) för att hantera betalningar.
Metoden cancelJobRequest låter en kund eller administratör avboka ett jobb. Den kontrollerar att användaren är behörig att avboka jobbet och uppdaterar sedan systemet för att återspegla avbokningen.
Metoden assignCleanerRequest används av administratörer för att tilldela specifika städare till ett jobb. Den kontrollerar att tilldelningen är giltig och uppdaterar sedan jobbinformationen i systemet.
Metoden executedCleaningRequest används av städare för att rapportera att ett jobb har utförts. Detta uppdaterar jobbets status i systemet.
Metoden approveDeclineCleaningRequest används av kunder för att godkänna eller avvisa ett utfört städjobb. Detta uppdaterar jobbets status och kan också utlösa fakturering.
Metoden reissueFailedCleaningRequest används för att hantera jobb som inte har godkänts och behöver göras om.
Metoder som getAllJobs, getAllJobsCleaner och getAllJobsCustomer används för att hämta listor över jobb, antingen för alla jobb i systemet, specifika jobb för städare, eller jobb bokade av en specifik kund.
Metoden deleteJob används för att ta bort ett jobb från systemet, vanligtvis av en administratör.
Metoder som getBookedCleaningsForCustomer och getBookingHistoryForCustomer används för att hantera och hämta information om bokningar och bokningshistorik för kunder.
Denna del hanterar olika aspekter av betalningsprocessen, som fakturering, betalning och uppföljning av obetalda fakturor.
Metoden createInvoiceOnJob används för att skapa en faktura när ett jobb har genomförts. Den skapar en betalningspost (faktura) för jobbet, sparar den i systemet och skickar sedan en faktura via e-post.
Metoden getAllInvoices används av administratörer för att hämta en lista över alla fakturor. Detta innebär att endast en administratör kan hämta denna information.
Metoden markInvoiceAsPaid används av administratörer för att markera en faktura som betald. Detta uppdaterar fakturans status i systemet och markerar även det associerade jobbet som avslutat.
Funktionen solvePrice används för att beräkna priset för ett jobb baserat på jobbtypen. Priset varierar beroende på typen av städtjänst som erbjuds.
Metoden updatePaymentStatusForDuePayments, som är schemalagd att köras automatiskt (t.ex. dagligen vid midnatt), uppdaterar statusen för betalningar som har passerat förfallodagen till " OVERDUE" (förfallen).
Metoden toDTO konverterar en betalningsentitet till ett format som kan överföras och användas av andra delar av applikationen eller skickas till frontend.
Metoden deleteInvoice används av administratörer för att ta bort en faktura ur systemet.
Detta är en tjänst i webbapplikationen som ansvarar för att validera data som matas in av användare. Denna tjänst säkerställer att informationen som skickas till systemet är korrekt och uppfyller förväntade kriterier.
Metoderna validateCustomerId, validateEmployeeId, validateJobId, och validatePaymentId används för att kontrollera att en specifik kund, anställd, jobb eller betalning finns i systemet. Om det inte finns någon post som motsvarar det angivna ID:t, kastas ett undantag.
Metoden validateInputDataField används för att säkerställa att inmatningsdata för olika fält (som kund-ID eller jobb-ID) är korrekta och inte saknas.
Metoden validateJobType används för att se till att en begärd jobbtyp är en av de definierade typerna (som grundstädning eller fönsterputsning).
Metoderna isValidEmailAddress och isValidPassword används för att kontrollera att en e-postadress och ett lösenord uppfyller vissa kriterier, som längd och innehåll.
Metoden isAdmin kontrollerar om en anställd med ett visst ID har rollen som administratör.
En tjänst i webbapplikationen som hanterar skickande av e-postmeddelanden i olika scenarier. Denna tjänst används för att automatiskt skicka e-postmeddelanden till kunder och anställda beroende på olika händelser inom systemet.
Metoden sendEmailConfirmationBookedJob skickar ett e-postmeddelande till en kund när de har bokat ett städjobb, för att bekräfta bokningen.
Metoden sendEmailConfirmationCanceledJob skickar ett e-postmeddelande till en kund för att bekräfta att ett städjobb har avbokats.
Metoden sendEmailConfirmationOnAssignedJob skickar ett e-postmeddelande till en städare när de har tilldelats ett nytt städjobb.
Metoden sendEmailConfirmationExecutedJob skickar ett e-postmeddelande till en kund när en städare har rapporterat att ett jobb är slutfört.
Metoden sendEmailConfirmationApprovedJob skickar ett e-postmeddelande till en kund när de har godkänt ett utfört städjobb.
Metoden sendEmailConfirmationFailedJob skickar ett e-postmeddelande till en kund när ett städjobb inte har godkänts.
Metoden sendEmailConfirmationReissuedJob skickar ett e-postmeddelande till en städare när ett jobb behöver göras om.
Metoden sendInvoice skickar en faktura till en kund för ett utfört städjobb.
Metoden sendEmailConfirmationOnPaidInvoice skickar ett e-postmeddelande till en kund för att bekräfta att en faktura har betalats.
Metoden sendEmailConfirmationMessageReceived skickar ett e-postmeddelande till en person som har kontaktat företaget via ett kontaktformulär.
KeycloakAPI är en tjänst i webbapplikationen som används för att hantera användarautentisering och auktorisering med hjälp av Keycloak, en öppen källkodsidentitets- och åtkomsthanteringslösning. Denna tjänst kommunicerar med Keycloak-servern för att utföra olika uppgifter relaterade till användarkonton.
KeycloakAPI tillhandahåller funktioner för att bestämma och tilldela roller till användare (som kunder, städare, eller administratörer) och hantera deras åtkomst till olika delar av systemet.
Metoderna addCustomerKeycloak och addEmployeeKeycloak används för att registrera nya användare i Keycloak, medan updateCustomerKeycloak och updateEmployeeKeycloak används för att uppdatera befintliga användares information.
Metoderna loginKeycloak och refreshToken hanterar användarautentisering och förnya säkerhetstokens. logoutKeycloak används för att logga ut användare och avaktivera deras tokens.
Metoden changePasswordKeycloak används för att ändra en användares lösenord.
Metoden deleteUserKeycloak används för att ta bort användare från Keycloak.
KeycloakAPI kan också hämta information om användare från Keycloak genom metoder som getKeycloakUserEntities och getKeycloakRoleEntities.
Följande klasser är delar av den kodstruktur som används för att interagera med Keycloak, de används för att representera olika typer av data som är nödvändiga för autentisering och användarhantering.
Credentials: Representerar autentiseringsuppgifter för en användare. Den innehåller information som typ av
autentiseringsuppgift (till exempel ett lösenord), själva värdet på uppgiften och om det är temporärt eller inte.
Används för att representera en ny användare i systemet. Den innehåller användarinformation som e-postadress, förnamn, efternamn och användarnamn, samt användarens autentiseringsuppgifter.
Används för att tilldela roller till användare i Keycloak. Den innehåller information om rollens ID och namn.
Representerar en roll i Keycloak. Den innehåller information om rollen, som ID, namn, beskrivning, och om rollen är sammansatt av andra roller eller specifik för en klient.
Används för att hantera säkerhetstokens i Keycloak. Den innehåller information om access-token och refresh-token, samt andra relaterade data som token-typ och giltighetstid.
Innehåller information om vilka åtkomsträttigheter en användare har i Keycloak, till exempel om användaren kan hantera gruppmedlemskap eller roller.
Representerar en användare i Keycloak. Den innehåller detaljerad information om användaren, som ID, skapandetid, användarnamn, om kontot är aktivt, e-postverifiering och användarens namn.
KlarnaAPI är en tjänst i webbapplikationen som används för att integrera med Klarnas betalningssystem. Klarna är en populär betalningslösning som tillåter kunder att betala för produkter och tjänster på olika sätt, inklusive faktura och delbetalning.
KlarnaAPI använder en RestTemplate för att skicka förfrågningar till Klarnas API.
Metoden createOrder används för att skapa en ny beställning hos Klarna. Den tar en jobbtyp (till exempel "BASIC" för grundstädning) och skapar en förfrågan som skickas till Klarna för att initiera betalningsprocessen.
Inuti createOrder finns det olika fall för olika typer av städjobb, som varje genererar en anpassad beställningsförfrågan. Till exempel kan det skilja sig åt i pris mellan en grundstädning och en fönsterputsning.
För varje typ av städjobb skapas en KlarnaCreateOrderRequest som innehåller detaljer om produkten eller tjänsten som köps, inklusive priset, skattesatsen och totalbeloppet.
Denna förfrågan skickas sedan till Klarna, och som svar får man en KlarnaCreateOrderResponse som innehåller HTML-kod för Klarnas checkout-snippet. Detta snippet kan sedan användas på webbplatsen för att visa Klarnas betalningsgränssnitt.
Svaret från Klarna, representerat av KlarnaCreateOrderResponse, innehåller vanligtvis en HTML-snutt som kan integreras i webbplatsen för att låta användaren genomföra betalningen.