1+ @startuml Film_Query_Service_Class_Diagram
2+ !theme plain
3+ skinparam classAttributeIconSize 0
4+ skinparam classFontStyle bold
5+ skinparam packageStyle rectangle
6+
7+ title Film Query Service - Class Diagram
8+
9+ ' Package declarations
10+ package "info.jab.ms" {
11+ class MainApplication {
12+ + main(args: String[]) : void
13+ }
14+ }
15+
16+ package "info.jab.ms.config" {
17+ class OpenApiConfig {
18+ + filmQueryOpenAPI () : OpenAPI
19+ }
20+ }
21+
22+ package "info.jab.ms.controller" {
23+ interface FilmControllerApi {
24+ + getFilms (startsWith : String ) : ResponseEntity <FilmDTO >
25+ }
26+
27+ class FilmController {
28+ - filmService : FilmService
29+ --
30+ + FilmController(filmService: FilmService)
31+ + getFilms(startsWith: String) : ResponseEntity<FilmDTO>
32+ - isValidStartsWithParameter(startsWith: String) : boolean
33+ }
34+
35+ class FilmDTO {
36+ + films : List<Film>
37+ + count : int
38+ + filter : Map<String, Object>
39+ --
40+ + fromEntities(entities: List<Film>, filterMap: Map<String, Object>) : FilmDTO
41+ + fromMaps(filmMaps: List<Map<String, Object>>, filterMap: Map<String, Object>) : FilmDTO
42+ }
43+
44+ class "FilmDTO.Film" as FilmDTOFilm {
45+ + filmId : Integer
46+ + title : String
47+ --
48+ + fromEntity(entity: Film) : Film
49+ + toMap() : Map<String, Object>
50+ }
51+
52+ class GlobalExceptionHandler {
53+ - logger : Logger
54+ --
55+ + handleRuntimeException(ex: RuntimeException, request: HttpServletRequest) : ResponseEntity<ProblemDetail>
56+ + handleGenericException(ex: Exception, request: HttpServletRequest) : ResponseEntity<ProblemDetail>
57+ }
58+ }
59+
60+ package "info.jab.ms.service" {
61+ class FilmService {
62+ - logger : Logger
63+ - filmRepository : FilmRepository
64+ --
65+ + FilmService(filmRepository: FilmRepository)
66+ + findFilmEntitiesByStartingLetter(letter: String) : List<Film>
67+ }
68+ }
69+
70+ package "info.jab.ms.repository" {
71+ class Film {
72+ + filmId : Integer
73+ + title : String
74+ }
75+
76+ interface FilmRepository {
77+ + findByTitleStartingWith (prefix : String ) : List <Film >
78+ + findAllOrderByTitle () : List <Film >
79+ }
80+ }
81+
82+ package "External Dependencies" {
83+ class ResponseEntity <T > <<Spring >> {
84+ }
85+
86+ class ProblemDetail <<Spring>> {
87+ }
88+
89+ interface ListCrudRepository <T ,ID > <<Spring Data >> {
90+ }
91+
92+ class SpringApplication <<Spring Boot>> {
93+ }
94+
95+ class OpenAPI <<SpringDoc>> {
96+ }
97+ }
98+
99+ ' Relationships
100+ FilmController ..|> FilmControllerApi : implements
101+ FilmController --> FilmService : uses
102+ FilmController --> FilmDTO : creates
103+ FilmService --> FilmRepository : uses
104+ FilmService --> Film : returns
105+ FilmRepository --|> ListCrudRepository : extends
106+ FilmRepository --> Film : manages
107+ FilmDTO *-- FilmDTOFilm : contains
108+ FilmDTOFilm ..> Film : converts from
109+ MainApplication --> SpringApplication : uses
110+ OpenApiConfig --> OpenAPI : creates
111+ GlobalExceptionHandler --> ProblemDetail : creates
112+
113+ ' Annotations and Stereotypes
114+ note right of MainApplication : @SpringBootApplication\nApplication Entry Point
115+ note right of OpenApiConfig : @Configuration\n@Bean
116+ note right of FilmController : @RestController\n@RequestMapping("/api/v1")
117+ note right of FilmService : @Service\nBusiness Logic Layer
118+ note right of FilmRepository : @Repository\nData Access Layer
119+ note right of GlobalExceptionHandler : @ControllerAdvice\nCentralized Exception Handling
120+ note right of Film : @Table("film")\n@Id, @Column annotations
121+ note right of FilmDTO : Record class\nData Transfer Object
122+
123+ ' Design Pattern Notes
124+ note top of FilmControllerApi : "API Contract Pattern\nSeparates interface from implementation"
125+ note bottom of FilmService : "Service Layer Pattern\nContains business logic"
126+ note bottom of FilmRepository : "Repository Pattern\nData access abstraction"
127+
128+ ' Architectural Layers
129+ note as N1
130+ **Layered Architecture **
131+ - Controller Layer : REST endpoints
132+ - Service Layer : Business logic
133+ - Repository Layer : Data access
134+ - Entity Layer : Data models
135+ end note
136+
137+ @enduml
0 commit comments