Vi ønsker at udarbejde et minimal viable product som kan akkommodere den resterende rejse for bilen. Fra afhentningssted, til tilbagelevering og videre til skaderegistrering.
I opgaven blev der stillet nogle krav som vi har løst gennem følgende gateways:
Data registrering : sales-gateway
Skade og udbedring : maintenance-gateway
forretningsudviklere : finance-gateway
Bekræft hos din arbejdsgiver at du er blevet oprettet i som medarbejder i systemet til den rigtige afdeleing.
-
method
POSTrequest
/din_afdelings_gateway_url/login
{
"email": "[email protected]",
"password": "paswoard123"
}
Hent vores Tableau Dashboards fra bilabonnement.dk
Gennem en domænemodel, har vi fastlagt strukturen og de vigtigste elementer i vores bilabonnementssystem, herunder relationer mellem vores fire klasser: cars, subscriptions, damage reports og damage types
classDiagram
class subscriptions {
Int subscription_id
Int car_id
Date subscription_start_date
Int subscription_end_date
Int subscription_duration_months
Int monthly_subscription_price
Int contracted_km
Int monthly_subscription_price
Boolean has_delivery_insurance
get_subscription() List
get_subscription_by_id(id : Int) Dict
get_active_subscriptions() Int
update_subscription(id : Int, data : Any) String
delete_item_by_id(id : Int) String
add_subscription(data : Any) String
heath_check() String
}
class cars {
Int car_id
String car_brand
String car_model
String fuel_type
Date registration_date
Int purchase_price
Int km_driven_since_last_end_subscription
Boolean is_available
get_cars() List
get_available_cars() List
get_car_by_id(id: Int) Dict
update_car(id : Int, data : Any) String
delete_car_by_id(id : Int) String
add_car(data : Any) String
}
class damage_reports {
Int damage_report_id
Int subscription_id
Int car_id
Date report_date
String description
Int damage_type_id
get_damage_reports() List
get_damage_reports_by_id(id: Int) Dict
get_damage_reports_by_subscription_id(id: Int) List
get_total_price_of_subscription_damages(id: Int) Int
get_damage_reports_by_carid(id: Int) List
get_the_repair_cost_by_subid(id : Int) List
get_the_repair_cost_by_carid(id : Int) List
update_damage_report(id : Int, updated_fields : Dict) String
delete_damage_report(id : Int) String
add_new_damage_report(data : Any) String
}
class damage_types {
Int damage_type_id
String damage_type
String severity
get_all_damage_types() List
find_type_by_id(id : Int) Dict
update_type(id : Int, data : Any) String
delete_type_by_id(id : Int) String
add_new_types(data : Any) String
}
subscriptions "1" -- "*" cars
damage_reports "*" -- "1" damage_types
subscriptions "1" -- "*" damage_reports
cars "1" -- "*" damage_reports
Da vi arbejder med JWT authentication har vi valgt at en user skal have en rolle før de kan tilgå en gateway. De roller og deres gateways er således:
Gateway | Role Required |
---|---|
admin-gateway | admin |
finance-gateway | finance |
sales-gateway | sales |
maintenance-gateway | maintenance |
Diagrammet viser, hvordan systemets mikroservice arkitektur er struktureret med de forskellige gateways og mikroservices, samt hvordan de relaterer til hinanden og databaserne.
graph LR
A["Develop Flask API in VS Code"] --> B["Create Dockerfile"]
B --> C["Push to GitHub"]
C --> D["DevOps"]
D --> D1["Build Docker Image"]
D --> D2["Push to DockerHub"]
D2 --> E["Azure Web App pulls image from DockerHub"]
Diagrammet viser en CI/CD-pipeline til deployment af en Flask API-applikation. Her er en kort forklaring:
-
Udvikling
Flask API udvikles i Visual Studio Code (eller et andet IDE). -
Dockerfile oprettes
En Dockerfile skrives for at containerisere applikationen. -
Push til GitHub
Koden pushes til et GitHub-repository for versionskontrol og samarbejde. -
DevOps-processen
- Build Docker Image: En Docker-container bygges automatisk ud fra koden og Dockerfilen.
- Push to DockerHub: Docker-image pushes til DockerHub, som fungerer som en container registry.
-
Deployment
Azure Web App trækker Docker-imaget fra DockerHub og deployer applikationen, så den er tilgængelig for brugere.
Denne pipeline automatiserer processen fra udvikling til deployment, hvilket gør det nemt og hurtigt at rulle opdateringer ud.