Files
albumcatalog/STRUCTURE.md
2020-11-07 19:00:27 +01:00

53 lines
5.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.