From 0a72059a89f80b6cfe7e7f32eb11e2607a82b8c4 Mon Sep 17 00:00:00 2001 From: Olle Date: Tue, 10 Feb 2026 19:51:23 +0100 Subject: [PATCH] create new projects --- set-random-secrets.bash | 3 +-- .../application/projects/ProjectService.java | 2 -- src/main/java/com/controller/Homepage.java | 1 - .../com/controller/ProjectController.java | 24 +++++++++++++++++++ .../requestData/CreateProjectRequest.java | 3 +++ .../database/entities/ProjectEntity.java | 10 ++------ .../project/ProjectRepositoryImpl.java | 5 +++- .../com/infrastructure/security/WebSec.java | 2 +- .../security/jwt/JwtFilter.java | 2 -- .../security/userdetails/UserInfoDetails.java | 1 - 10 files changed, 35 insertions(+), 18 deletions(-) create mode 100644 src/main/java/com/controller/ProjectController.java create mode 100644 src/main/java/com/controller/requestData/CreateProjectRequest.java diff --git a/set-random-secrets.bash b/set-random-secrets.bash index fd0b38b..b60796a 100644 --- a/set-random-secrets.bash +++ b/set-random-secrets.bash @@ -1,6 +1,5 @@ -# JWT -export jwt_secret="c3ByaW5nX2Jvb3RfYXBwQGxvY2FsaG9zdDo4MDgwCg==" +export jwt_secret="Q2hhdEdQVC1zZWN1cmUtYW5kLXN0cm9uZy1rZXktMTIzNA==" # HikariCP settings diff --git a/src/main/java/com/application/projects/ProjectService.java b/src/main/java/com/application/projects/ProjectService.java index 994adb8..5523d8b 100644 --- a/src/main/java/com/application/projects/ProjectService.java +++ b/src/main/java/com/application/projects/ProjectService.java @@ -6,9 +6,7 @@ @Service public class ProjectService { - private final ProjectRepository projectRepository; - public ProjectService(ProjectRepository projectRepository) { this.projectRepository = projectRepository; } diff --git a/src/main/java/com/controller/Homepage.java b/src/main/java/com/controller/Homepage.java index e6fb79a..acf2191 100644 --- a/src/main/java/com/controller/Homepage.java +++ b/src/main/java/com/controller/Homepage.java @@ -1,7 +1,6 @@ package com.controller; import com.application.About.AboutService; import com.application.dto.FullAbout; -import com.domain.models.About; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; diff --git a/src/main/java/com/controller/ProjectController.java b/src/main/java/com/controller/ProjectController.java new file mode 100644 index 0000000..21cdcd9 --- /dev/null +++ b/src/main/java/com/controller/ProjectController.java @@ -0,0 +1,24 @@ +package com.controller; +import com.application.projects.ProjectService; +import com.controller.requestData.CreateProjectRequest; +import com.infrastructure.security.userdetails.UserInfoDetails; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class ProjectController { + private final ProjectService projectService; + public ProjectController(ProjectService projectService) { + this.projectService = projectService; + } + @PostMapping("/admin/project/create") + public String createProject(@RequestBody CreateProjectRequest projectRequest) { + Authentication auth = SecurityContextHolder.getContext().getAuthentication(); + UserInfoDetails user = (UserInfoDetails) auth.getPrincipal(); + Long userId = user.getId(); + return "Project created with id: " + this.projectService.createProject(projectRequest.projectTitle(), projectRequest.projectInformation(),userId); + } +} diff --git a/src/main/java/com/controller/requestData/CreateProjectRequest.java b/src/main/java/com/controller/requestData/CreateProjectRequest.java new file mode 100644 index 0000000..7c6f0c8 --- /dev/null +++ b/src/main/java/com/controller/requestData/CreateProjectRequest.java @@ -0,0 +1,3 @@ +package com.controller.requestData; + +public record CreateProjectRequest(String projectTitle, String projectInformation) {} \ No newline at end of file diff --git a/src/main/java/com/infrastructure/database/entities/ProjectEntity.java b/src/main/java/com/infrastructure/database/entities/ProjectEntity.java index b81fe60..0548337 100644 --- a/src/main/java/com/infrastructure/database/entities/ProjectEntity.java +++ b/src/main/java/com/infrastructure/database/entities/ProjectEntity.java @@ -1,17 +1,11 @@ package com.infrastructure.database.entities; -import com.domain.models.About; import com.domain.models.Project; -import jakarta.persistence.Entity; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.OneToMany; -import jakarta.persistence.OneToOne; - -import java.util.Set; +import jakarta.persistence.*; @Entity public class ProjectEntity extends EntityBase { - @OneToOne + @ManyToOne @JoinColumn(name = "user_id", nullable = false) private UserEntity owner; private String shortIntroduction; diff --git a/src/main/java/com/infrastructure/database/repository/project/ProjectRepositoryImpl.java b/src/main/java/com/infrastructure/database/repository/project/ProjectRepositoryImpl.java index 5c8d872..fc41bb0 100644 --- a/src/main/java/com/infrastructure/database/repository/project/ProjectRepositoryImpl.java +++ b/src/main/java/com/infrastructure/database/repository/project/ProjectRepositoryImpl.java @@ -11,14 +11,17 @@ @Repository public class ProjectRepositoryImpl implements ProjectRepository { private final JpaUserRepository jpaUserRepository; - public ProjectRepositoryImpl(JpaUserRepository jpaUserRepository) { + private final JpaProjectRepository jpaProjectRepository; + public ProjectRepositoryImpl(JpaUserRepository jpaUserRepository, JpaProjectRepository jpaProjectRepository) { this.jpaUserRepository = jpaUserRepository; + this.jpaProjectRepository = jpaProjectRepository; } @Override public Long createProject(Project project, Long id) { UserEntity user = jpaUserRepository.findById(id) .orElseThrow(() -> new EntityNotFoundException("User not found")); ProjectEntity projectEntity = new ProjectEntity(user, project); + jpaProjectRepository.save(projectEntity); return projectEntity.getId(); } } diff --git a/src/main/java/com/infrastructure/security/WebSec.java b/src/main/java/com/infrastructure/security/WebSec.java index 57b2440..d10c0d1 100644 --- a/src/main/java/com/infrastructure/security/WebSec.java +++ b/src/main/java/com/infrastructure/security/WebSec.java @@ -20,7 +20,7 @@ public SecurityFilterChain filterAdmin(HttpSecurity http, JwtFilter jwtFilter, A http .securityMatcher("/admin/**") .authorizeHttpRequests(auth -> auth - .requestMatchers("/admin/dashboard/**").hasAuthority("ADMIN") + .anyRequest().hasAuthority("ADMIN") ) .authenticationProvider(authenticationProvider) .addFilterBefore(jwtFilter, UsernamePasswordAuthenticationFilter.class) diff --git a/src/main/java/com/infrastructure/security/jwt/JwtFilter.java b/src/main/java/com/infrastructure/security/jwt/JwtFilter.java index 446d292..42ab853 100644 --- a/src/main/java/com/infrastructure/security/jwt/JwtFilter.java +++ b/src/main/java/com/infrastructure/security/jwt/JwtFilter.java @@ -22,8 +22,6 @@ public JwtFilter(UserInfoService userInfoService, JwtService jwtService) { protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { String authHeader = request.getHeader("Authorization"); String token = authHeader.substring(7); - System.out.println(token); - String username = jwtService.extractUsername(token); UserDetails user = userInfoService.loadUserByUsername(username); boolean validateToken = jwtService.validateToken(token, user.getUsername()); diff --git a/src/main/java/com/infrastructure/security/userdetails/UserInfoDetails.java b/src/main/java/com/infrastructure/security/userdetails/UserInfoDetails.java index f6a72ce..8c3fc4b 100644 --- a/src/main/java/com/infrastructure/security/userdetails/UserInfoDetails.java +++ b/src/main/java/com/infrastructure/security/userdetails/UserInfoDetails.java @@ -3,7 +3,6 @@ import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; - import java.util.Collection; import java.util.List;