├── README.md ├── backend └── imperblog-backend │ ├── .gitignore │ ├── .mvn │ └── wrapper │ │ ├── maven-wrapper.jar │ │ └── maven-wrapper.properties │ ├── mvnw │ ├── mvnw.cmd │ ├── pom.xml │ ├── src │ ├── main │ │ ├── java │ │ │ └── com │ │ │ │ └── aureocarmelino │ │ │ │ └── imperblogbackend │ │ │ │ ├── ImperblogBackendApplication.java │ │ │ │ ├── api │ │ │ │ ├── controller │ │ │ │ │ ├── AuthenticationController.java │ │ │ │ │ ├── ChartController.java │ │ │ │ │ ├── PostController.java │ │ │ │ │ └── TokenController.java │ │ │ │ ├── exception │ │ │ │ │ ├── Field.java │ │ │ │ │ ├── GlobalExceptionHandler.java │ │ │ │ │ └── Problem.java │ │ │ │ ├── repository │ │ │ │ │ ├── AuthorRepository.java │ │ │ │ │ └── PostRepository.java │ │ │ │ └── service │ │ │ │ │ ├── AuthenticationService.java │ │ │ │ │ ├── ChartService.java │ │ │ │ │ └── PostService.java │ │ │ │ ├── config │ │ │ │ ├── CorsFilterConfig.java │ │ │ │ ├── ModelMapperConfig.java │ │ │ │ ├── PasswordEncoderConfig.java │ │ │ │ └── SecretKey.java │ │ │ │ ├── model │ │ │ │ ├── dto │ │ │ │ │ ├── SignUpDto │ │ │ │ │ │ └── SignUpDto.java │ │ │ │ │ ├── chartDto │ │ │ │ │ │ └── ChartDto.java │ │ │ │ │ ├── loginDto │ │ │ │ │ │ └── LoginDto.java │ │ │ │ │ └── postDto │ │ │ │ │ │ └── CreatePostDto.java │ │ │ │ ├── entity │ │ │ │ │ ├── Author.java │ │ │ │ │ ├── Gender.java │ │ │ │ │ └── Post.java │ │ │ │ └── exception │ │ │ │ │ ├── BusinessException.java │ │ │ │ │ └── ObjectNotFoundException.java │ │ │ │ ├── security │ │ │ │ ├── AuthorDetailsServiceImpl.java │ │ │ │ ├── AuthorSystem.java │ │ │ │ ├── oauth2 │ │ │ │ │ ├── AuthorizationServerConfig.java │ │ │ │ │ └── ResourceServerConfig.java │ │ │ │ └── token │ │ │ │ │ ├── CustomTokenEncher.java │ │ │ │ │ ├── RefreshTokenCookiePreProcessorFilter.java │ │ │ │ │ └── RefreshTokenPostProcessor.java │ │ │ │ └── util │ │ │ │ └── constant │ │ │ │ ├── ConstantAuthentication.java │ │ │ │ ├── ConstantGlobalExceptionHandler.java │ │ │ │ └── ConstantPost.java │ │ └── resources │ │ │ ├── application.properties │ │ │ └── db │ │ │ └── migration │ │ │ ├── V01__create_table_author.sql │ │ │ └── V02__create_table_post.sql │ └── test │ │ └── java │ │ └── com │ │ └── aureocarmelino │ │ └── imperblogbackend │ │ ├── ImperblogBackendApplicationTests.java │ │ └── api │ │ ├── controller │ │ ├── AuthenticationControllerTest.java │ │ ├── ChartControllerTest.java │ │ ├── PostControllerTest.java │ │ └── TokenControllerTest.java │ │ ├── repository │ │ ├── AuthorRepositoryTest.java │ │ └── PostRepositoryTest.java │ │ └── service │ │ ├── AuthenticationServiceTest.java │ │ ├── ChartServiceTest.java │ │ └── PostServiceTest.java │ └── system.properties ├── frontend-angular └── imperblog-frontend │ ├── .browserslistrc │ ├── .editorconfig │ ├── .gitignore │ ├── README.md │ ├── angular.json │ ├── karma.conf.js │ ├── package-lock.json │ ├── package.json │ ├── src │ ├── app │ │ ├── app-routing.module.ts │ │ ├── app.component.css │ │ ├── app.component.html │ │ ├── app.component.ts │ │ ├── app.module.ts │ │ ├── components │ │ │ ├── header-profile │ │ │ │ ├── header-profile.component.css │ │ │ │ ├── header-profile.component.html │ │ │ │ └── header-profile.component.ts │ │ │ ├── header │ │ │ │ ├── header.component.css │ │ │ │ ├── header.component.html │ │ │ │ └── header.component.ts │ │ │ ├── home-page │ │ │ │ ├── home-page.component.css │ │ │ │ ├── home-page.component.html │ │ │ │ └── home-page.component.ts │ │ │ ├── login │ │ │ │ ├── login.component.css │ │ │ │ ├── login.component.html │ │ │ │ └── login.component.ts │ │ │ ├── page-not-found │ │ │ │ ├── page-not-found.component.css │ │ │ │ ├── page-not-found.component.html │ │ │ │ └── page-not-found.component.ts │ │ │ ├── profile │ │ │ │ ├── profile.component.css │ │ │ │ ├── profile.component.html │ │ │ │ └── profile.component.ts │ │ │ └── register │ │ │ │ ├── register.component.css │ │ │ │ ├── register.component.html │ │ │ │ └── register.component.ts │ │ ├── guard-routes │ │ │ └── imperblogauth.guard.ts │ │ ├── interceptor │ │ │ └── imper-blog-http-interceptor.ts │ │ ├── models │ │ │ ├── Author.ts │ │ │ ├── ChartDto.ts │ │ │ ├── CreatePostDto.ts │ │ │ ├── LoginDto.ts │ │ │ └── Post.ts │ │ └── services │ │ │ ├── add-post.service.ts │ │ │ ├── auth.service.ts │ │ │ ├── error-handler.service.ts │ │ │ ├── list-post.service.ts │ │ │ ├── logout.service.ts │ │ │ └── signup.service.ts │ ├── assets │ │ ├── .gitkeep │ │ └── img │ │ │ ├── crown.png │ │ │ ├── emptyList.png │ │ │ ├── error-404.png │ │ │ └── login.avif │ ├── environments │ │ ├── environment.prod.ts │ │ └── environment.ts │ ├── favicon.ico │ ├── index.html │ ├── main.ts │ ├── polyfills.ts │ ├── styles.css │ └── test.ts │ ├── tsconfig.app.json │ ├── tsconfig.json │ └── tsconfig.spec.json ├── myassets ├── blog_app.gif ├── create_database.PNG ├── login.PNG ├── print_postman_collection.PNG ├── run_test.PNG ├── run_test2.PNG ├── unit_run_tests.gif ├── unit_test.png └── unit_test2.png └── postman_collection └── ImperBlog.postman_collection.json /README.md: -------------------------------------------------------------------------------- 1 | # FullStack App ( Spring + Angular ) : ImperBlog :bookmark_tabs: 2 | 3 | **1) ENGLISH** 4 | 5 | Application for creating blog posts, developed with Java using Spring Framework for backend and Angular along with PrimeNG Library for frontend development. 6 | 7 | **1) PORTUGUESE** 8 | 9 | Aplicação para a criação de postagens ao estilo BLOG, desenvolvida com Java utilizando o Spring Framework para o backend e o Angular juntamente com a Biblioteca PrimeNG para o desenvolvimento frontend. 10 | 11 | **2) ENGLISH** 12 | 13 | ###### `The App has the following features:` 14 | 15 | 1. Creating a user account 16 | 2. Login access validation using Spring Security 17 | 3. Creating multiple posts per user 18 | 4. Listagem de todas as postagens na página inicial 19 | 5. Listing of all posts on the homepage 20 | 6. view a post 21 | 7. Edit a logged-in user's post 22 | 8. Delete a post from the logged in user 23 | 9. View the graph of users by gender (M & F) 24 | 9. Responsive design suitable for most devices 25 | 10. Logout 26 | 11. JWT Token Usage 27 | 12. Update token automatically 28 | 13. Frontend URL protection 29 | 14. Redirection to login when token expires 30 | 14. Backend unit tests in Controllers, Services and Repositories classes 31 | 15. And additional features or functionality in both Backend and Frontend for better user usability 32 | 33 | **2) PORTUGUESE** 34 | 35 | **`O App conta com as seguintes funcionalidades:`** 36 | 37 | 1. Criação de uma conta de utilizador 38 | 2. Validação de acesso com login utilizando Spring Security 39 | 3. Criação de várias postagens por utilizador 40 | 4. Listagem de todas as postagens na página inicial 41 | 5. Listagem de todas as postagens de um utilizador no seu perfil 42 | 6. Visualizar uma postagem 43 | 7. Editar uma postagem do utilizador logado 44 | 8. Deletar uma postagem do utilizador logado 45 | 9. Visualizar o gráfico de utilizadores por gênero ( M & F ) 46 | 9. Design Responsivo adequado para a maioria dos dispositivos 47 | 10. Logout 48 | 11. Utilização do Token JWT 49 | 12. Refresh Token automático 50 | 13. Proteção de URL's no frontend 51 | 14. Redirecionamento para o login quando o token expira 52 | 15. Testes unitários no Backend nas classes dos Controllers, Services e Repositories 53 | 16. E recursos ou funcionalidades adicionais tanto no Backend como no Frontend para melhor usabilidade do usuário 54 | 55 | **EN: The final system is available for testing at:** **[https://imperblog.vercel.app/](https://imperblog.vercel.app/)** 56 | 57 | **PT: O sistema final encontra-se disponível para teste em :** **[https://imperblog.vercel.app/](https://imperblog.vercel.app/)** 58 | 59 |
60 |
61 |
93 |
94 |
134 |
135 |
150 |
151 |
159 |
160 |
163 |
164 |
174 |
175 |
184 |
185 |
197 |
198 |