# mariajuliasales/linketinder-project architecture

> Architecture diagram of the GitHub repository mariajuliasales/linketinder-project, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/mariajuliasales/linketinder-project
- Repository: https://github.com/mariajuliasales/linketinder-project

## Overview

Linketinder is a Groovy terminal application for connecting candidates with company vacancies through technical-competence alignment. The documented user-facing capabilities include candidate and company registration, validation, persistence, and interactive navigation; the tree also shows vacancy services and models. Source excerpts were not provided for runtime classes, so the graph shows documented responsibilities but omits uncertain call and data-flow wiring.

Main entry points: [`Linketinder/src/main/groovy/com/mariajuliasales/Main.groovy`](https://github.com/mariajuliasales/linketinder-project/blob/main/Linketinder/src/main/groovy/com/mariajuliasales/Main.groovy) (Application entry), [`Linketinder/src/main/groovy/com/mariajuliasales/menu/Menu.groovy`](https://github.com/mariajuliasales/linketinder-project/blob/main/Linketinder/src/main/groovy/com/mariajuliasales/menu/Menu.groovy) (Interactive menu)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interaction["Terminal interaction"]
  node_main["Application entry<br/>[Main.groovy]"]
  node_menu["Interactive menu<br/>[Menu.groovy]"]
  node_view["Terminal view<br/>[View.groovy]"]
end

subgraph group_services["Application services"]
  node_candidate_service["Candidate registration"]
  node_enterprise_service["Company registration"]
  node_vacancy_service["Vacancy service"]
  node_validation["Input validation"]
  node_mapper["Candidate mapping"]
end

subgraph group_domain["Domain and persistence"]
  node_candidate_request["Candidate input"]
  node_candidate_response["Candidate output"]
  node_anonymous_response["Anonymous output"]
  node_candidate["Candidate model<br/>[Candidate.groovy]"]
  node_enterprise["Company model<br/>[Enterprise.groovy]"]
  node_vacancy["Vacancy model<br/>[Vacancy.groovy]"]
  node_competence["Technical skills<br/>[Competence.groovy]"]
  node_database[("In-memory repository<br/>[Database.groovy]")]
end

node_user(("Terminal user"))

node_user -->|"starts"| node_main
node_user -->|"navigates"| node_menu

click node_main "https://github.com/mariajuliasales/linketinder-project/blob/main/Linketinder/src/main/groovy/com/mariajuliasales/Main.groovy"
click node_menu "https://github.com/mariajuliasales/linketinder-project/blob/main/Linketinder/src/main/groovy/com/mariajuliasales/menu/Menu.groovy"
click node_view "https://github.com/mariajuliasales/linketinder-project/blob/main/Linketinder/src/main/groovy/com/mariajuliasales/menu/View.groovy"
click node_candidate_service "https://github.com/mariajuliasales/linketinder-project/blob/main/Linketinder/src/main/groovy/com/mariajuliasales/service/CandidateService.groovy"
click node_enterprise_service "https://github.com/mariajuliasales/linketinder-project/blob/main/Linketinder/src/main/groovy/com/mariajuliasales/service/EnterpriseService.groovy"
click node_vacancy_service "https://github.com/mariajuliasales/linketinder-project/blob/main/Linketinder/src/main/groovy/com/mariajuliasales/service/VacancyService.groovy"
click node_validation "https://github.com/mariajuliasales/linketinder-project/blob/main/Linketinder/src/main/groovy/com/mariajuliasales/util/ValidateUtil.groovy"
click node_mapper "https://github.com/mariajuliasales/linketinder-project/blob/main/Linketinder/src/main/groovy/com/mariajuliasales/mapper/CandidateMapper.groovy"
click node_candidate_request "https://github.com/mariajuliasales/linketinder-project/blob/main/Linketinder/src/main/groovy/com/mariajuliasales/dto/request/CandidateRequest.groovy"
click node_candidate_response "https://github.com/mariajuliasales/linketinder-project/blob/main/Linketinder/src/main/groovy/com/mariajuliasales/dto/response/CandidateResponse.groovy"
click node_anonymous_response "https://github.com/mariajuliasales/linketinder-project/blob/main/Linketinder/src/main/groovy/com/mariajuliasales/dto/response/CandidateAnonymousResponse.groovy"
click node_candidate "https://github.com/mariajuliasales/linketinder-project/blob/main/Linketinder/src/main/groovy/com/mariajuliasales/model/Candidate.groovy"
click node_enterprise "https://github.com/mariajuliasales/linketinder-project/blob/main/Linketinder/src/main/groovy/com/mariajuliasales/model/Enterprise.groovy"
click node_vacancy "https://github.com/mariajuliasales/linketinder-project/blob/main/Linketinder/src/main/groovy/com/mariajuliasales/model/Vacancy.groovy"
click node_competence "https://github.com/mariajuliasales/linketinder-project/blob/main/Linketinder/src/main/groovy/com/mariajuliasales/model/Competence.groovy"
click node_database "https://github.com/mariajuliasales/linketinder-project/blob/main/Linketinder/src/main/groovy/com/mariajuliasales/repository/Database.groovy"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_main,node_menu,node_view,node_user toneBlue
class node_candidate_service,node_enterprise_service,node_vacancy_service,node_validation,node_mapper toneAmber
class node_candidate_request,node_candidate_response,node_anonymous_response,node_candidate,node_enterprise,node_vacancy,node_competence,node_database toneMint
```

## Components

### Terminal interaction

- [Application entry](https://github.com/mariajuliasales/linketinder-project/blob/main/Linketinder/src/main/groovy/com/mariajuliasales/Main.groovy): `Linketinder/src/main/groovy/com/mariajuliasales/Main.groovy`
- [Interactive menu](https://github.com/mariajuliasales/linketinder-project/blob/main/Linketinder/src/main/groovy/com/mariajuliasales/menu/Menu.groovy): `Linketinder/src/main/groovy/com/mariajuliasales/menu/Menu.groovy`
- [Terminal view](https://github.com/mariajuliasales/linketinder-project/blob/main/Linketinder/src/main/groovy/com/mariajuliasales/menu/View.groovy): `Linketinder/src/main/groovy/com/mariajuliasales/menu/View.groovy`

### Application services

- [Candidate registration](https://github.com/mariajuliasales/linketinder-project/blob/main/Linketinder/src/main/groovy/com/mariajuliasales/service/CandidateService.groovy): `Linketinder/src/main/groovy/com/mariajuliasales/service/CandidateService.groovy`
- [Company registration](https://github.com/mariajuliasales/linketinder-project/blob/main/Linketinder/src/main/groovy/com/mariajuliasales/service/EnterpriseService.groovy): `Linketinder/src/main/groovy/com/mariajuliasales/service/EnterpriseService.groovy`
- [Vacancy service](https://github.com/mariajuliasales/linketinder-project/blob/main/Linketinder/src/main/groovy/com/mariajuliasales/service/VacancyService.groovy): `Linketinder/src/main/groovy/com/mariajuliasales/service/VacancyService.groovy`
- [Input validation](https://github.com/mariajuliasales/linketinder-project/blob/main/Linketinder/src/main/groovy/com/mariajuliasales/util/ValidateUtil.groovy): `Linketinder/src/main/groovy/com/mariajuliasales/util/ValidateUtil.groovy`
- [Candidate mapping](https://github.com/mariajuliasales/linketinder-project/blob/main/Linketinder/src/main/groovy/com/mariajuliasales/mapper/CandidateMapper.groovy): `Linketinder/src/main/groovy/com/mariajuliasales/mapper/CandidateMapper.groovy`

### Domain and persistence

- [Candidate input](https://github.com/mariajuliasales/linketinder-project/blob/main/Linketinder/src/main/groovy/com/mariajuliasales/dto/request/CandidateRequest.groovy): `Linketinder/src/main/groovy/com/mariajuliasales/dto/request/CandidateRequest.groovy`
- [Candidate output](https://github.com/mariajuliasales/linketinder-project/blob/main/Linketinder/src/main/groovy/com/mariajuliasales/dto/response/CandidateResponse.groovy): `Linketinder/src/main/groovy/com/mariajuliasales/dto/response/CandidateResponse.groovy`
- [Anonymous output](https://github.com/mariajuliasales/linketinder-project/blob/main/Linketinder/src/main/groovy/com/mariajuliasales/dto/response/CandidateAnonymousResponse.groovy): `Linketinder/src/main/groovy/com/mariajuliasales/dto/response/CandidateAnonymousResponse.groovy`
- [Candidate model](https://github.com/mariajuliasales/linketinder-project/blob/main/Linketinder/src/main/groovy/com/mariajuliasales/model/Candidate.groovy): `Linketinder/src/main/groovy/com/mariajuliasales/model/Candidate.groovy`
- [Company model](https://github.com/mariajuliasales/linketinder-project/blob/main/Linketinder/src/main/groovy/com/mariajuliasales/model/Enterprise.groovy): `Linketinder/src/main/groovy/com/mariajuliasales/model/Enterprise.groovy`
- [Vacancy model](https://github.com/mariajuliasales/linketinder-project/blob/main/Linketinder/src/main/groovy/com/mariajuliasales/model/Vacancy.groovy): `Linketinder/src/main/groovy/com/mariajuliasales/model/Vacancy.groovy`
- [Technical skills](https://github.com/mariajuliasales/linketinder-project/blob/main/Linketinder/src/main/groovy/com/mariajuliasales/model/Competence.groovy): `Linketinder/src/main/groovy/com/mariajuliasales/model/Competence.groovy`
- [In-memory repository](https://github.com/mariajuliasales/linketinder-project/blob/main/Linketinder/src/main/groovy/com/mariajuliasales/repository/Database.groovy): `Linketinder/src/main/groovy/com/mariajuliasales/repository/Database.groovy`

### Other components

- **Terminal user**

## Connections

- Terminal user → Application entry: starts
- Terminal user → Interactive menu: navigates
