Skip to content

Commit 26570a7

Browse files
committed
style: refactor project structure
1 parent f4986bd commit 26570a7

File tree

76 files changed

+883
-1853
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

76 files changed

+883
-1853
lines changed

src/main/java/com/luwis/application/CustomExceptionResolver.java

-53
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.luwis.application;
2+
3+
import graphql.GraphQLError;
4+
import graphql.execution.ResultPath;
5+
6+
public class Exception extends RuntimeException {
7+
public GraphQLError resolve(String msg, ResultPath path) {
8+
return GraphQLError.newError()
9+
.message(msg)
10+
.path(path)
11+
.build();
12+
}
13+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package com.luwis.application;
2+
3+
import java.security.InvalidParameterException;
4+
5+
import org.springframework.graphql.execution.DataFetcherExceptionResolverAdapter;
6+
import org.springframework.stereotype.Component;
7+
8+
import graphql.GraphQLError;
9+
import graphql.execution.ResultPath;
10+
import graphql.schema.DataFetchingEnvironment;
11+
import jakarta.persistence.EntityExistsException;
12+
import jakarta.persistence.EntityNotFoundException;
13+
14+
@Component
15+
public class ExceptionResolver extends DataFetcherExceptionResolverAdapter {
16+
17+
@Override
18+
protected GraphQLError resolveToSingleError(Throwable ex, DataFetchingEnvironment env) {
19+
20+
ResultPath path = env.getExecutionStepInfo().getPath();
21+
String msg = ex.getMessage();
22+
23+
if (ex instanceof InvalidParameterException) {
24+
return new Exception().resolve(msg, path);
25+
}
26+
27+
if (ex instanceof EntityExistsException) {
28+
return new Exception().resolve(msg, path);
29+
}
30+
31+
if (ex instanceof EntityNotFoundException) {
32+
return new Exception().resolve(msg, path);
33+
}
34+
35+
return null;
36+
}
37+
38+
}

src/main/java/com/luwis/application/configs/SecurityConfig.java

+5-7
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,6 @@
1313
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
1414
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
1515
import org.springframework.security.config.http.SessionCreationPolicy;
16-
import org.springframework.security.core.AuthenticationException;
17-
import org.springframework.security.core.userdetails.UserDetailsService;
1816
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
1917
import org.springframework.security.crypto.password.PasswordEncoder;
2018
import org.springframework.security.oauth2.jose.jws.MacAlgorithm;
@@ -25,7 +23,7 @@
2523
import org.springframework.security.web.SecurityFilterChain;
2624
import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
2725

28-
import com.luwis.application.services.CustomUserDetailsService;
26+
import com.luwis.application.services.AuthDetailsService;
2927

3028
import com.nimbusds.jose.jwk.source.ImmutableSecret;
3129

@@ -39,7 +37,7 @@ public class SecurityConfig {
3937

4038
@Value("${JWT_KEY}")
4139
private String jwtKey;
42-
private final CustomUserDetailsService customUserDetailsService;
40+
private final AuthDetailsService authDetailsService;
4341

4442
@Bean
4543
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
@@ -55,17 +53,17 @@ public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Excepti
5553
.anyRequest().authenticated())
5654
.sessionManagement(
5755
session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
58-
.userDetailsService(customUserDetailsService)
56+
.userDetailsService(authDetailsService)
5957
.oauth2ResourceServer(
6058
oauth2 -> oauth2
6159
.jwt(jwt -> jwt.decoder(jwtDecoder())))
6260
.build();
6361
}
6462

6563
@Bean
66-
public AuthenticationManager authenticationManager(UserDetailsService userDetailsService) throws AuthenticationException {
64+
public AuthenticationManager authenticationManager(AuthDetailsService authDetailsService) {
6765
var authProvider = new DaoAuthenticationProvider();
68-
authProvider.setUserDetailsService(customUserDetailsService);
66+
authProvider.setUserDetailsService(authDetailsService);
6967
authProvider.setPasswordEncoder(passwordEncoder());
7068
return new ProviderManager(authProvider);
7169
}

src/main/java/com/luwis/application/controllers/AuthController.java

+12-13
Original file line numberDiff line numberDiff line change
@@ -5,32 +5,31 @@
55
import org.springframework.graphql.data.method.annotation.QueryMapping;
66
import org.springframework.stereotype.Controller;
77

8-
import com.luwis.application.graphql.inputs.LoginInput;
9-
import com.luwis.application.graphql.inputs.SignupInput;
10-
import com.luwis.application.graphql.responses.LoginRes;
11-
import com.luwis.application.graphql.responses.SignupRes;
8+
import com.luwis.application.entities.User;
9+
import com.luwis.application.inputs.LoginInput;
10+
import com.luwis.application.inputs.SignupInput;
11+
import com.luwis.application.middlewares.Validator;
1212
import com.luwis.application.services.AuthService;
13-
import com.luwis.application.utils.InputValidator;
1413

1514
import lombok.RequiredArgsConstructor;
1615

1716
@Controller
1817
@RequiredArgsConstructor
1918
public class AuthController {
2019

21-
private final InputValidator inputValidator;
2220
private final AuthService authService;
23-
21+
private final Validator validator;
22+
2423
@MutationMapping
25-
public SignupRes Signup(@Argument SignupInput user) {
26-
inputValidator.validate(user);
27-
return authService.signup(user);
24+
public User Signup(@Argument SignupInput input) {
25+
validator.validate(input.email(), input.password());
26+
return authService.Signup(input.firstName(), input.secondName(), input.email(), input.password());
2827
}
2928

3029
@QueryMapping
31-
public LoginRes Login(@Argument LoginInput user) {
32-
inputValidator.validate(user);
33-
return authService.login(user);
30+
public String Login(@Argument LoginInput input) {
31+
validator.validate(input.email(), input.password());
32+
return authService.Login(input.email(), input.password());
3433
}
3534

3635
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package com.luwis.application.controllers;
2+
3+
import java.util.List;
4+
5+
import org.springframework.graphql.data.method.annotation.Argument;
6+
import org.springframework.graphql.data.method.annotation.MutationMapping;
7+
import org.springframework.graphql.data.method.annotation.QueryMapping;
8+
import org.springframework.stereotype.Controller;
9+
10+
import com.luwis.application.entities.Task;
11+
import com.luwis.application.inputs.CreateTaskInput;
12+
import com.luwis.application.inputs.UpdateTaskInput;
13+
import com.luwis.application.services.TaskService;
14+
import com.luwis.application.services.TokenService;
15+
16+
import lombok.RequiredArgsConstructor;
17+
18+
@Controller
19+
@RequiredArgsConstructor
20+
public class TaskController {
21+
22+
private final TaskService taskService;
23+
private final TokenService tokenService;
24+
25+
@MutationMapping
26+
public Task CreateTask(@Argument CreateTaskInput input) {
27+
return taskService.CreateTask(input.title(), input.description(), Long.valueOf(tokenService.extractSubject()));
28+
}
29+
30+
@MutationMapping
31+
public Task UpdateTask(@Argument UpdateTaskInput input) {
32+
return taskService.UpdateTask(input.id(), input.title(), input.description(), input.pending(), Long.valueOf(tokenService.extractSubject()));
33+
}
34+
35+
@MutationMapping
36+
public Task DeleteTask(@Argument Long id) {
37+
return taskService.DeleteTask(id, Long.valueOf(tokenService.extractSubject()));
38+
}
39+
40+
@QueryMapping
41+
public List<Task> GetTasks() {
42+
return taskService.GetTasks(Long.valueOf(tokenService.extractSubject()));
43+
}
44+
45+
}

src/main/java/com/luwis/application/controllers/TodoController.java

-53
This file was deleted.

src/main/java/com/luwis/application/entities/CustomUserDetails.java src/main/java/com/luwis/application/entities/AuthDetails.java

+15-19
Original file line numberDiff line numberDiff line change
@@ -6,43 +6,39 @@
66
import org.springframework.security.core.GrantedAuthority;
77
import org.springframework.security.core.authority.SimpleGrantedAuthority;
88
import org.springframework.security.core.userdetails.UserDetails;
9-
import org.springframework.security.core.userdetails.UsernameNotFoundException;
109

10+
import jakarta.persistence.EntityNotFoundException;
1111
import lombok.RequiredArgsConstructor;
1212

1313
@RequiredArgsConstructor
14-
public class CustomUserDetails implements UserDetails {
14+
public class AuthDetails implements UserDetails {
1515

16-
private final UserModel user;
16+
private final User user;
1717

18+
public Long getId() {
19+
return user.getId();
20+
}
21+
1822
@Override
1923
public Collection<? extends GrantedAuthority> getAuthorities() {
2024
String authorities = "READ WRITE UPDATE DELETE";
2125
return Arrays
22-
.stream(authorities.split(" "))
23-
.map(SimpleGrantedAuthority::new)
24-
.toList();
25-
}
26-
27-
public Long getId() {
28-
return user.getId();
26+
.stream(authorities.split(" "))
27+
.map(SimpleGrantedAuthority::new)
28+
.toList();
2929
}
3030

31-
public String getName() {
32-
return user.getName();
31+
@Override
32+
public String getPassword() {
33+
if (user == null) throw new EntityNotFoundException("This Email Is Not Registered");
34+
return user.getPassword();
3335
}
3436

3537
@Override
3638
public String getUsername() {
3739
return user.getEmail();
3840
}
3941

40-
@Override
41-
public String getPassword() {
42-
if (user == null) throw new UsernameNotFoundException("Error: User Is Not Registered");
43-
return user.getPassword();
44-
}
45-
4642
@Override
4743
public boolean isAccountNonExpired() {
4844
return true;
@@ -62,5 +58,5 @@ public boolean isCredentialsNonExpired() {
6258
public boolean isEnabled() {
6359
return true;
6460
}
65-
61+
6662
}

src/main/java/com/luwis/application/entities/Task.java

+3-4
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,14 @@ public class Task {
3030
@NonNull
3131
@Column(length = 50)
3232
private String title;
33-
34-
@NonNull
33+
3534
@Column(length = 100)
3635
private String description;
3736

38-
@Column(insertable = false)
37+
@Column
3938
private Boolean pending = true;
4039

41-
@Column(insertable = false)
40+
@Column(updatable = false)
4241
private LocalDate createdAt = LocalDate.now();
4342

4443
@NonNull

0 commit comments

Comments
 (0)