53 lines
5.7 KiB
Markdown
53 lines
5.7 KiB
Markdown
# Project structure and files
|
||
|
||
- **build.gradle** – This contains the dependencies needed for the project.
|
||
- **src/main**
|
||
* **java**
|
||
* ```com.droideparanoico.albumcatalog```
|
||
* **ServletInitializer.java** – this class extends SpringBootServletInitializer to make it eligible to deploy as a traditional WAR application.
|
||
* **SpringBootAlbumCatalog.java** – This class is annotated with @SpringBootApplication which does the auto-configuration of the application.
|
||
* ```com.droideparanoico.albumcatalog.config```
|
||
* **SwaggerConfiguration.java** – This is a @Configuration annotated class that contains the beans that initialize Swagger for this application.
|
||
* ```com.droideparanoico.albumcatalog.controller```
|
||
* **ArtistController.java** – This is a @Controller annotated classes that contains the request handler method for the following endpoints:
|
||
GET / – The request handler method listArtistAndAlbums(Model) is called when we land on the root application.
|
||
* ```com.droideparanoico.albumcatalog.controller.data```
|
||
* **ArtistRestController.java** – This is a @RestController annotated class that contains the request handler method for the following endpoints:
|
||
|
||
|HTTP Method|Endpoint|Request Handling Method|Description|
|
||
|:---:|:---:|:---:|---|
|
||
|```GET```|```/artist/```|```root()```|returns **“application is working!”** when called|
|
||
|```GET```|```/artist/all```|```getAllArtists()```|returns ```Iterable<Artist>``` when called|
|
||
|```GET```|```/artist/{id}```|```getArtistById(BigInteger)```|returns the ```Artist``` with the given id when called|
|
||
|```POST```|```/artist/{name}```|```createArtist(String)```|for creating a new **Artist** with the given name and returns the same after creation|
|
||
|```DELETE```|```/artist/{id}```|```deleteArtist(BigInteger)```|for deleting an **Artist** by id|
|
||
|```GET```|```/artist/{id}/albums```|```getAlbumsByArtist(BigInteger)```|for fetching all the albums of the **Artist** with the given id|
|
||
|```DELETE```|```/artist/{id}/albums```|```deleteAllAlbumsFromArtist(BigInteger)```|for deleting all the albums of the **Artist** with the given id|
|
||
|```POST```|```/artist/{id}/add```|```addAlbumToArtist(BigInteger, Album)```|for adding the given **Album** to the **Artist** with the given id and returns the created album|
|
||
|```GET```|```/artist/albums```|```getAllAlbums()```|returns ```List<Album>``` that fetches all the albums from all the artists|
|
||
|```PUT```|```/artist/albums/{id}/move```|```moveAlbumToDifferentArtist(BigInteger, BigInteger)```|for moving an album from one artist to another|
|
||
|```DELETE```|```/artist/{id}/albums/{album_id}```|```deleteFromArtist(BigInteger, BigInteger)```|for deleting an album from an artist|
|
||
|
||
> **ArtistRestController** uses **ArtistService** for business logic and interacting with persistence layer.
|
||
* ```com.droideparanoico.albumcatalog.database```
|
||
* **ArtistRepository.java** – this interface extends JpaRepository for interacting with artist database table.
|
||
* **AlbumsRepository.java** – this interface extends JpaRepository for interacting with album database table.
|
||
* ```com.droideparanoico.albumcatalog.exception```
|
||
* **ExceptionController.java** – this class is annotated with @ControllerAdvice and contains @ExceptionHandler annotated method to handle exceptions.
|
||
* **ArtistNotFoundException.java** – a custom exception class for managing an invalid artist.
|
||
* **AlbumNotFoundException.java** – a custom exception class for managing an invalid album.
|
||
* ```com.droideparanoico.albumcatalog.model```
|
||
* **ErrorCodes.java** – and enum that holds the error codes associated with our custom exceptions.
|
||
* **Artist.java** – a POJO class for saving the artist information.
|
||
* **Album.java** – a POJO class for saving the album information.
|
||
* ```com.droideparanoico.albumcatalog.service```
|
||
* **ArtistService.java** – a Business Facade Service that controllers use to interact with the database repositories and contains the business logic to manipulate the data that is transferred between the controller and persistence layer.
|
||
* resources
|
||
* ```templates```
|
||
* **index.html** – the HTML template with embedded Thymeleaf constructs for rendering the server-side response.
|
||
* ```static```
|
||
* **custom.css** – a cascading stylesheet for our application.
|
||
* **scripts.js** – a Javascript file containing the method to interact with our backend RESTful APIs that we have built.
|
||
* **application.properties** – contains the Spring Boot configurations.
|
||
* **application-dev.properties** – contains the Spring Boot configurations for ```dev``` profile.
|
||
* **data.sql** – initializing database script that is executed at the time of application boot up. |