Skip to content

hogeschoolnovi/backend-spring-boot-tech-it-easy-relations

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 

Repository files navigation

Opdrachtbeschrijving

Inleiding

Je bent net begonnen als developer bij een bedrijf dat TV's verkoopt: Tech It Easy. Tijdens de cursus Spring Boot ga jij een backend applicatie programmeren voor het bedrijf. De winkel heeft een inventaris van televisies die moet worden bijgehouden. Na iedere les gaan we deze applicatie een stukje verder uitbouwen door middel van de huiswerkopdrachten. Zo krijg je stap-voor-stap meer ervaring in het bouwen van een backend applicatie. Aan het einde van de cursus zullen we een werkende Tech It Easy backend applicatie hebben!

Recap van vorige opdracht

Je hebt inmiddels je applicatie draaiende gekregen. Dit geeft je de mogelijkheid om in een database bij te houden welke tv's er zijn in de inventaris van TechItEasy. Als je de benamingen hebt aangehouden die we tot nu toe hebben gebruikt, kunnen we een data.sql gaan maken waardoor we gegevens in de database kunnen zetten. Dit is een soort van pre-fill van je database.

Opdrachtbeschrijving

In deze opdracht ga je aan de slag met het toevoegen van relaties aan je applicatie.

Randvoorwaarden

De opdracht moet voldoen aan de volgende voorwaarden:

Het project bevat de volgende models:

  • Television
  • RemoteController met de variables: -Longid -StringcompatibleWith -StringbatteryType -Stringname -Stringbrand -Double price -Integer originalStock
  • CI-Module met de variables: -Long id -String name -String type -Double price
  • WallBracket met de variables: -Long id -String size -Boolean adjustable -String name -Double price Voor elk van deze modellen bevat je applicatie ook een Repository, Controller, Dto, InputDto en een Service.

Daarnaast bevat het project:

  • Een OneToOne relatie tussen Television en RemoteController
  • Een OneToMany relatie tussen Television en CI-Module
  • Een ManyToMany relatie tussen Televisionen WallBracket

Belangrijk

Je mag de constructors uit de modellen weglaten. Deze vult Spring Boot automatisch in als ze niet gedefinieerd zijn. Ook uit de Television mogen de constructors verwijderd worden.

Stappenplan

Let op: het is uitdagender om jouw eigen stappenplan te maken. Mocht je niet zo goed weten waar je moet beginnen, kun je onderstaand stappenplan volgen:

  1. Maak in de map models een klasse aan voor RemoteController, CI-Module en WallBracket (voeg de juiste annotatie, variables, getters&setters en constructors toe).
  2. Maak in de map repositories voor elk model een Repository aan (die elk de JpaRepository extends bevat).
  3. Maak in de map controllers voor elk model een Controller aan (met juiste annotatie, constructor en requestMappings).
  4. Maak in de map dtos voor elk model een Dto en InputDto aan (met juiste variables en toewijzingen).
  5. Maak in de map services voor elk model een Service aan (met juiste annotatie, constructor en functions).
  6. Leg een OneToOne relatie tussen Television en RemoteController door in beide models @OneToOne toe te voegen, gevolgd door het model waar de relatie mee ligt in de vorm van Model object (bijvoorbeeld Television television) op de volgende regel.
  7. Een OneToOne relatie heeft een eigenaar nodig. Maak de Television eigenaar door in RemoteController achter de @OneToOne mappedBy toe te voegen op deze manier _@OneToOne(mappedBy = "remotecontroller"). Dit zorgt ervoor dat in de Television tabel een kolom wordt toegevoegd met de naam remotecontroller_id. Vergeet niet de getter en setter toe te voegen na het leggen van de relatie in de modellen.
  8. Om deze kolom te vullen zal je in servicelaag ook een functie moeten maken die een koppeling maakt tussen de Television en de RemoteController. Dit doe je in de TelevisionService.
  9. Voeg de functie "assignRemoteControllerToTelevision" toe in de TelevisionService. Zoals je ziet, herkent de TelevisionService de RemoteControllerRepository niet, dit komt omdat we deze nog niet gekoppeld hebben in de constructor, gelukkig hoef je niet alles opnieuw te doen. Je kan bovenaan in de TelevisionService onder de private TelevisionRepository een private RemoteControllerRepository declareren. En dan in de bestaande constructor deze toevoegen op dezelfde manier als de TelevisionRepository. Dit resulteert in:
public TelevisionService (TelevisionRepository televisionRepository, 
                         RemoteControllerRepository remoteControllerRepository) {
   this.televisionRepository = televisionRepository;
   this.remoteControllerRepository = remoteControllerRepository;
}
  1. Om deze functie uit te kunnen voeren moet je in de TelevisionController een PutRequest maken met endpoint "/televisions/{id}/remotecontroller" om aan te spreken. Voeg deze toe en geef de televisionId mee als @PathVariable en de remoteControllerId als @RequestBody door middel van een IdInputDto input.
  2. Hiervoor missen we nog de IdInputDto. Maak in het mapje Dtos een nieuwe klasse aan voor de IdInputDto. Declareer in deze dto een public Long id toe, meer hoeft er niet in.
  3. Gefeliciteerd, je hebt zo juist de eerste relatie gelegd in je applicatie!
  4. Alleen als je nu met een get alle Televisions ophaalt, zie je geen RemoteController. Dit komt omdat we in de TelevisionDto nog niks hebben verteld over de RemoteController. De makkelijkste manier om hier de uitbreiding te leggen is de public RemoteControllerDto remoteController; toe te voegen aan de variabele van de TelevisionDto
  5. Test alle functies die je tot nu toe hebt gemaakt met Postman.

Je hebt nu de relatie tussen de televisie en remoteController gemaakt. Maak nu relatie tussen Televisie en CiModule en Televisie en Wallbracket.

Mocht je er niet uit komen:

Stappenplan Televisie koppelen aan CiModule

Stap 1: De OneToMany relatie toevoegen

  • Maak de Television eigenaar door in CiModule achter @OneToMany mappedBy toe te voegen.
  • Voeg in Television @ManyToOne(fetch = FetchType.EAGER) en @JoinColumn(name = "ci_module_id") toe.
  • Vergeet de getter en setter niet.

Stap 2: Functie in de servicelaag maken

  • Maak een functie in TelevisionService om een CiModule aan een Television te koppelen.

Stap 3: Functie "assignCiModuleToTelevision" toevoegen

  • Voeg in TelevisionService een private CiModuleRepository toe en initialiseer deze in de constructor.
  • Voeg de functie assignCiModuleToTelevision toe.

Stap 4: PutRequest in de controller maken

  • Maak in de TelevisionController een PUT endpoint "/televisions/{id}/cimodule" aan.
  • Gebruik @PathVariable voor televisionId en @RequestBody met een IdInputDto voor cimoduleId.

Stap 5: Dto connectie maken

  • Voeg in TelevisionDto de variabele public CiModuleDto ciModuleDto; toe.

Stap 6: Functies testen met Postman

  • Test alle functies die je tot nu toe hebt gemaakt met Postman.
  • Test onder andere het koppelen van een CiModule aan een Television en het ophalen van alle Televisions om te controleren of de CiModule correct is gekoppeld.
Stappenplan Televisie koppelen aan WallBracket

Stap 1: De ManyToMany relatie toevoegen

  • Maak de Television eigenaar door in WallBracket achter @ManyToMany mappedBy toe te voegen.
  • Voeg in Television @ManyToMany @JoinTable(name = "television_Wallbrackets", joinColumns @JoinColumn(name = "television"), inverseJoinColumns = @JoinColumn(name = "wallbracket") toe.
  • Vergeet de getter en setter niet.

Stap 2: Functie in de servicelaag maken

  • Maak een functie in TelevisionService om een WallBracket aan een Television te koppelen.

Stap 3: Functie "assignCiModuleToTelevision" toevoegen

  • Voeg in TelevisionService een private WallBracketRepository toe en initialiseer deze in de constructor.
  • Voeg de functie assignWallBracketToTelevision toe.

Stap 4: PutRequest in de controller maken

  • Maak in de TelevisionController een PUT endpoint "/televisions/{id}/WallBracket" aan.
  • Gebruik @PathVariable voor televisionId en @RequestBody met een IdInputDto voor de WallBracket.

Stap 5: Dto connectie maken

  • Voeg in TelevisionDto de variabele public WallBracketDto wallBracketdto; toe.

Stap 6: Functies testen met Postman

  • Test alle functies die je tot nu toe hebt gemaakt met Postman.
  • Test onder andere het koppelen van een WallBracket aan een Television en het ophalen van alle Televisions om te controleren of de WallBracket correct is gekoppeld.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •