diff --git a/.gitignore b/.gitignore index b24d71e..d914762 100644 --- a/.gitignore +++ b/.gitignore @@ -1,50 +1,47 @@ -# These are some examples of commonly ignored file patterns. -# You should customize this list as applicable to your project. -# Learn more about .gitignore: -# https://www.atlassian.com/git/tutorials/saving-changes/gitignore - -# Node artifact files -node_modules/ -dist/ - -# Compiled Java class files -*.class - -# Compiled Python bytecode -*.py[cod] - -# Log files -*.log - -# Package files +*# +*.iml +*.ipr +*.iws *.jar - -# Maven -target/ -dist/ - -# JetBrains IDE -.idea/ - -# Unit test reports -TEST*.xml - -# Generated by MacOS +*.sw? +*~ +.#* +.*.md.html .DS_Store +.attach_pid* +.classpath +.factorypath +.gradle +.idea +.metadata +.project +.recommenders +.settings +.springBeans +.vscode +/code +MANIFEST.MF +_site/ +activemq-data +bin +build +!/**/src/**/bin +!/**/src/**/build +build.log +dependency-reduced-pom.xml +dump.rdb +interpolated*.xml +lib/ +manifest.yml +out +overridedb.* +target +transaction-logs +.flattened-pom.xml +secrets.yml +src/main/resources/application-local.yml +.gradletasknamecache +.sts4-cache -# Generated by Windows -Thumbs.db - -# Applications -*.app -*.exe -*.war - -# Large media files -*.mp4 -*.tiff -*.avi -*.flv -*.mov -*.wmv - +mvnw +mvnw.cmd diff --git a/pom.xml b/pom.xml index e9c589a..ce75179 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ org.springframework.boot spring-boot-starter-parent - 3.0.6 + 2.7.5 com.iconplus @@ -14,9 +14,73 @@ smartproc Initialisasi Smartproc Framework - 17 + 11 + + + org.springframework.boot + spring-boot-starter-security + 2.5.4 + + + org.springframework.security + spring-security-web + + + org.springframework.security + spring-security-config + + + + + org.springframework.security.oauth.boot + spring-security-oauth2-autoconfigure + 2.5.2 + + + org.springframework.security + spring-security-web + + + org.springframework.security + spring-security-config + + + + + org.springframework.security + spring-security-web + 5.3.9.RELEASE + + + org.springframework.security + spring-security-config + 5.3.9.RELEASE + + + + com.google.zxing + core + 3.3.0 + + + com.google.zxing + javase + 3.3.0 + + + + io.jsonwebtoken + jjwt + 0.9.1 + + + com.nimbusds + nimbus-jose-jwt + 8.19 + + org.springframework.boot spring-boot-starter-data-jpa @@ -29,13 +93,28 @@ org.springframework.boot spring-boot-starter-web - + + io.zipkin.brave + brave + 5.16.0 + + + org.apache.velocity + velocity-engine-core + 2.3 + + + org.apache.commons + commons-lang3 + 3.12.0 + org.springframework.boot spring-boot-devtools runtime true + org.postgresql postgresql diff --git a/src/main/java/com/iconplus/smartproc/configuration/CustomUserDetailsService.java b/src/main/java/com/iconplus/smartproc/configuration/CustomUserDetailsService.java new file mode 100644 index 0000000..3d6bc23 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/configuration/CustomUserDetailsService.java @@ -0,0 +1,33 @@ +package com.iconplus.smartproc.configuration; + +import com.iconplus.smartproc.model.projection.UserRoleView; +import com.iconplus.smartproc.repository.RolesRepository; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Optional; + +@Service +public class CustomUserDetailsService implements UserDetailsService { + + private final RolesRepository rolesRepository; + + public CustomUserDetailsService(RolesRepository rolesRepository) { + this.rolesRepository = rolesRepository; + } + + + @Override + public UserDetails loadUserByUsername(String username) { + List authorities = null; + Optional userRole = rolesRepository.getUserRoleByUserId(username); + if (userRole.isPresent()) { + authorities=List.of(new SimpleGrantedAuthority(userRole.get().getRole())); + } + + return new org.springframework.security.core.userdetails.User(username, username, authorities); + } +} diff --git a/src/main/java/com/iconplus/smartproc/configuration/JwtAuthenticationAccessDenied.java b/src/main/java/com/iconplus/smartproc/configuration/JwtAuthenticationAccessDenied.java new file mode 100644 index 0000000..a7d80d5 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/configuration/JwtAuthenticationAccessDenied.java @@ -0,0 +1,39 @@ +package com.iconplus.smartproc.configuration; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.iconplus.smartproc.exception.ErrorResponse; +import com.iconplus.smartproc.util.Constants; +import lombok.extern.log4j.Log4j2; +import org.springframework.http.MediaType; +import org.springframework.security.access.AccessDeniedException; +import org.springframework.security.web.access.AccessDeniedHandler; +import org.springframework.stereotype.Component; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +@Component +@Log4j2 +public class JwtAuthenticationAccessDenied implements AccessDeniedHandler { + + private static final String DEFAULT_CODE = "30000"; + private static final String DEFAULT_MESSAGE = "Access denied"; + + @Override + public void handle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, AccessDeniedException e) throws IOException { + + log.error("Access denied, {}", e.getMessage()); + + ErrorResponse errorResponse = new ErrorResponse(); + errorResponse.setCode(DEFAULT_CODE); + errorResponse.setTitle(Constants.TITLE_INVALID_NEXT_STEP); + errorResponse.setMessage(DEFAULT_MESSAGE); + + httpServletResponse.setStatus(HttpServletResponse.SC_FORBIDDEN); + httpServletResponse.setContentType(MediaType.APPLICATION_JSON_VALUE); + + httpServletResponse.getOutputStream() + .println(new ObjectMapper().writeValueAsString(errorResponse)); + } +} diff --git a/src/main/java/com/iconplus/smartproc/configuration/JwtAuthenticationEntryPoint.java b/src/main/java/com/iconplus/smartproc/configuration/JwtAuthenticationEntryPoint.java new file mode 100644 index 0000000..e6fa58d --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/configuration/JwtAuthenticationEntryPoint.java @@ -0,0 +1,54 @@ +package com.iconplus.smartproc.configuration; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.iconplus.smartproc.exception.ErrorResponse; +import com.iconplus.smartproc.util.Constants; +import org.springframework.http.MediaType; +import org.springframework.security.core.AuthenticationException; +import org.springframework.security.web.AuthenticationEntryPoint; +import org.springframework.stereotype.Component; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + + +@Component +public class JwtAuthenticationEntryPoint implements AuthenticationEntryPoint { + + @Override + public void commence(HttpServletRequest request, HttpServletResponse response, + AuthenticationException authException) throws IOException { + + ErrorResponse errorResponse = new ErrorResponse(); + + response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); + response.setContentType(MediaType.APPLICATION_JSON_VALUE); + + var exception = (Exception) request.getAttribute("exception"); + + String message; + + if (exception != null) { + + if (exception.getCause() != null) { + message = exception.getCause().toString() + " " + exception.getMessage(); + } else { + message = exception.getMessage(); + } + + errorResponse.setCode(Constants.ERR_CODE_40051); + errorResponse.setTitle(Constants.TITLE_INVALID_NEXT_STEP); + errorResponse.setMessage(message); + response.getOutputStream() + .println(new ObjectMapper().writeValueAsString(errorResponse)); + } else { + errorResponse.setCode(Constants.ERR_CODE_80007); + errorResponse.setTitle(Constants.TITLE_INVALID_NEXT_STEP); + errorResponse.setMessage("Invalid Access Token"); + response.getOutputStream() + .println(new ObjectMapper().writeValueAsString(errorResponse)); + } + } + +} diff --git a/src/main/java/com/iconplus/smartproc/configuration/JwtRequestFilter.java b/src/main/java/com/iconplus/smartproc/configuration/JwtRequestFilter.java new file mode 100644 index 0000000..ade2f23 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/configuration/JwtRequestFilter.java @@ -0,0 +1,80 @@ +package com.iconplus.smartproc.configuration; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.model.request.PostAccessTokenRequest; +import com.iconplus.smartproc.service.authentication.PostCheckAccessTokenService; +import io.jsonwebtoken.ExpiredJwtException; +import org.springframework.http.HttpStatus; +import org.springframework.security.authentication.BadCredentialsException; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.stereotype.Component; +import org.springframework.util.StringUtils; +import org.springframework.web.filter.OncePerRequestFilter; + +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +@Component +public class JwtRequestFilter extends OncePerRequestFilter { + + private final JwtTokenUtil jwtTokenUtil; + private final PostCheckAccessTokenService postCheckAccessTokenService; + + public JwtRequestFilter(JwtTokenUtil jwtTokenUtil, + PostCheckAccessTokenService postCheckAccessTokenService) { + this.jwtTokenUtil = jwtTokenUtil; + this.postCheckAccessTokenService = postCheckAccessTokenService; + } + + @Override + protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) + throws ServletException, IOException { + try { + String jwtToken = extractJwtFromRequest(request); + if (StringUtils.hasText(jwtToken) && jwtTokenUtil.validateTokenOnly(jwtToken)) { + isValidToken(request, jwtToken); + UserDetails userDetails = new org.springframework.security.core.userdetails.User(jwtTokenUtil.getUsernameFromToken(jwtToken), "", + jwtTokenUtil.getRolesFromToken(jwtToken)); + + UsernamePasswordAuthenticationToken usernamePasswordAuthenticationToken = new UsernamePasswordAuthenticationToken( + userDetails, null, userDetails.getAuthorities()); + SecurityContextHolder.getContext().setAuthentication(usernamePasswordAuthenticationToken); + } + } catch(ExpiredJwtException | BadCredentialsException ex) + { + request.setAttribute("exception", ex); + } + chain.doFilter(request, response); + } + + private void isValidToken(HttpServletRequest request, String jwtToken) { + String requestUrl = request.getRequestURI(); + String refreshTokenUrl = "/api/authentication/refresh-token"; + String forgotPasswordUrl = "/api/authentication/forgot-password"; + if (!org.apache.commons.lang3.StringUtils.equalsAnyIgnoreCase(requestUrl, refreshTokenUrl, forgotPasswordUrl)) { + var isValid = isValidAuthenticateToken(jwtToken); + if (!isValid) { + throw new BusinessException(HttpStatus.UNAUTHORIZED, "Invalid Access Token"); + } + } + } + + private boolean isValidAuthenticateToken(String jwtToken) { + return postCheckAccessTokenService.execute(PostAccessTokenRequest.builder() + .accessToken(jwtToken) + .build()).getIsValid(); + } + + private String extractJwtFromRequest(HttpServletRequest request) { + String bearerToken = request.getHeader("Authorization"); + if (StringUtils.hasText(bearerToken) && bearerToken.startsWith("Bearer ")) { + return bearerToken.substring(7); + } + return null; + } +} \ No newline at end of file diff --git a/src/main/java/com/iconplus/smartproc/configuration/JwtTokenUtil.java b/src/main/java/com/iconplus/smartproc/configuration/JwtTokenUtil.java new file mode 100644 index 0000000..c1b06a3 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/configuration/JwtTokenUtil.java @@ -0,0 +1,97 @@ +package com.iconplus.smartproc.configuration; + +import com.iconplus.smartproc.model.token.TokenContent; +import io.jsonwebtoken.*; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.authentication.BadCredentialsException; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.stereotype.Component; + +import java.io.Serializable; +import java.security.KeyPair; +import java.util.*; +import java.util.function.Function; + +@Component +public class JwtTokenUtil implements Serializable { + private static final long serialVersionUID = -2550185165626007488L; + + @Autowired + private KeyPair keyPair; + + //retrieve expiration date from jwt token + public Date getExpirationDateFromToken(String token) { + return getClaimFromToken(token, Claims::getExpiration); + } + public T getClaimFromToken(String token, Function claimsResolver) { + final Claims claims = getAllClaimsFromToken(token); + return claimsResolver.apply(claims); + } + //for retrieveing any information from token we will need the secret key + public Claims getAllClaimsFromToken(String token) { + return Jwts.parser().setSigningKey(keyPair.getPublic()).parseClaimsJws(token).getBody(); + } + + private Boolean isTokenExpired(String token) { + final Date expiration = getExpirationDateFromToken(token); + return expiration.before(new Date()); + } + + public String generateToken(String username, TokenContent tokenContent, Integer expirationInMs) { + Map claims = new HashMap<>(); + + claims.put("authorities", tokenContent.getAccessMenu()); + claims.put("nama", tokenContent.getNama()); + claims.put("username", tokenContent.getUsername()); + claims.put("user_id", tokenContent.getUserId()); + claims.put("roleId", tokenContent.getRoleId()); + claims.put("role", tokenContent.getRole()); + claims.put("instansiId", tokenContent.getInstansiId()); + claims.put("instansi", tokenContent.getInstansi()); + claims.put("bidangId", tokenContent.getBidangId()); + claims.put("bidang", tokenContent.getBidang()); + claims.put("jabatanId", tokenContent.getJabatanId()); + claims.put("jabatan", tokenContent.getJabatan()); + + return doGenerateToken(claims, username, expirationInMs); + } + + public String doGenerateToken(Map claims, String subject, Integer expirationInMs) { + return Jwts.builder().setClaims(claims).setSubject(subject).setIssuedAt(new Date(System.currentTimeMillis())) + .setExpiration(new Date(System.currentTimeMillis() + expirationInMs)) + .signWith(SignatureAlgorithm.RS256, keyPair.getPrivate()).compact(); + } + + public Boolean validateToken(String token, UserDetails userDetails) { + final String username = getUsernameFromToken(token); + return (username.equals(userDetails.getUsername()) && !isTokenExpired(token)); + } + + public boolean validateTokenOnly(String authToken) { + try { + Jwts.parser().setSigningKey(keyPair.getPublic()).parseClaimsJws(authToken); + return true; + } catch (SignatureException | MalformedJwtException | UnsupportedJwtException | IllegalArgumentException ex) { + throw new BadCredentialsException("INVALID_CREDENTIALS", ex); + } catch (ExpiredJwtException ex) { + throw ex; + } + } + + public String getUsernameFromToken(String token) { + Claims claims = Jwts.parser().setSigningKey(keyPair.getPublic()).parseClaimsJws(token).getBody(); + return claims.getSubject(); + + } + + @SuppressWarnings("squid:S4834") + public List getRolesFromToken(String token) { + Claims claims = Jwts.parser().setSigningKey(keyPair.getPublic()).parseClaimsJws(token).getBody(); + List authorityList = new ArrayList<>(); + ArrayList authorities = claims.get("authorities", ArrayList.class); + authorities.forEach(c-> authorityList.add(new SimpleGrantedAuthority(c))); + return authorityList; + + } +} \ No newline at end of file diff --git a/src/main/java/com/iconplus/smartproc/configuration/KeyConfiguration.java b/src/main/java/com/iconplus/smartproc/configuration/KeyConfiguration.java new file mode 100644 index 0000000..6077f9c --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/configuration/KeyConfiguration.java @@ -0,0 +1,30 @@ +package com.iconplus.smartproc.configuration; + +import com.iconplus.smartproc.util.RSAUtil; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.security.KeyPair; +import java.security.PrivateKey; +import java.security.PublicKey; + +@Configuration +public class KeyConfiguration { + + @Value("${jwt.private-key}") + private String privateKey; + + @Value("${jwt.public-key}") + private String publicKey; + + @Bean + public KeyPair keypairBean() { + + PublicKey pubKey = RSAUtil.getPublicKey(publicKey); + PrivateKey privKey = RSAUtil.getPrivateKey(privateKey); + + return new KeyPair(pubKey, privKey); + } + +} diff --git a/src/main/java/com/iconplus/smartproc/configuration/WebSecurityConfig.java b/src/main/java/com/iconplus/smartproc/configuration/WebSecurityConfig.java new file mode 100644 index 0000000..0546d49 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/configuration/WebSecurityConfig.java @@ -0,0 +1,58 @@ +package com.iconplus.smartproc.configuration; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.builders.WebSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; +import org.springframework.security.config.http.SessionCreationPolicy; +import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; + + +@Configuration +@EnableWebSecurity +@EnableGlobalMethodSecurity(prePostEnabled = true) +public class WebSecurityConfig extends WebSecurityConfigurerAdapter { + + @Autowired + private JwtAuthenticationEntryPoint jwtAuthenticationEntryPoint; + + @Autowired + private JwtAuthenticationAccessDenied jwtAuthenticationAccessDenied; + + @Autowired + private JwtRequestFilter jwtRequestFilter; + + @Override + protected void configure(HttpSecurity httpSecurity) throws Exception { + httpSecurity + .sessionManagement() + .sessionCreationPolicy(SessionCreationPolicy.STATELESS) + .sessionFixation().none().and() + .csrf().disable(); + httpSecurity.authorizeRequests() + .antMatchers("/api*/**").permitAll() + .antMatchers("/api/authentication/*").permitAll() + .antMatchers("/actuator/health").permitAll() + .antMatchers("/swagger*/**").permitAll() + .antMatchers("/v2*/**").permitAll() + .antMatchers("/token/jwks.json").permitAll() + .anyRequest().authenticated().and() + .exceptionHandling().authenticationEntryPoint(jwtAuthenticationEntryPoint) + .accessDeniedHandler(jwtAuthenticationAccessDenied); + httpSecurity.addFilterBefore(jwtRequestFilter, UsernamePasswordAuthenticationFilter.class); + + } + + @Override + public void configure(WebSecurity web) throws Exception { + web.ignoring().antMatchers("/v2/api-docs", + "/configuration/ui", + "/swagger-resources/**", + "/configuration/security", + "/swagger-ui.html", + "/webjars/**"); + } +} \ No newline at end of file diff --git a/src/main/java/com/iconplus/smartproc/controller/ApprovalDrpController.java b/src/main/java/com/iconplus/smartproc/controller/ApprovalDrpController.java new file mode 100644 index 0000000..9953b47 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/controller/ApprovalDrpController.java @@ -0,0 +1,114 @@ +package com.iconplus.smartproc.controller; + +import com.iconplus.smartproc.helper.model.EmptyRequest; +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.model.request.DrpApprovalRequest; +import com.iconplus.smartproc.model.request.DrpRekomendasiRequest; +import com.iconplus.smartproc.model.request.ListDrpApprovalRequest; +import com.iconplus.smartproc.model.response.*; +import com.iconplus.smartproc.service.approval.*; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.web.bind.annotation.*; + +@CrossOrigin(origins = "${fe.server}", allowCredentials = "true") +@RestController +@RequestMapping("/api/drp/approval") +public class ApprovalDrpController { + + private GetListUserVpService getListUserVpService; + private GetListUserDirekturKomiteService getListUserDirekturKomiteService; + private PostCreateDrpApprovalService postCreateDrpApprovalService; + private GetListApprovalDrpServie getListApprovalDrpServie; + private PostDrpRekomendasiService postDrpRekomendasiService; + private PostDrpApprovalExecutionService postDrpApprovalExecutionService; + private GetApprovalService getApprovalService; + private GetListRekomendasiService getListRekomendasiService; + private GetHistoryApprovalService getHistoryApprovalService; + public ApprovalDrpController(GetListUserVpService getListUserVpService, + GetListUserDirekturKomiteService getListUserDirekturKomiteService, + PostCreateDrpApprovalService postCreateDrpApprovalService, + GetListApprovalDrpServie getListApprovalDrpServie, + PostDrpRekomendasiService postDrpRekomendasiService, + PostDrpApprovalExecutionService postDrpApprovalExecutionService, + GetApprovalService getApprovalService, + GetListRekomendasiService getListRekomendasiService, + GetHistoryApprovalService getHistoryApprovalService) { + this.getListUserVpService = getListUserVpService; + this.getListUserDirekturKomiteService = getListUserDirekturKomiteService; + this.postCreateDrpApprovalService = postCreateDrpApprovalService; + this.getListApprovalDrpServie = getListApprovalDrpServie; + this.postDrpRekomendasiService = postDrpRekomendasiService; + this.postDrpApprovalExecutionService = postDrpApprovalExecutionService; + this.getApprovalService = getApprovalService; + this.getListRekomendasiService = getListRekomendasiService; + this.getHistoryApprovalService = getHistoryApprovalService; + } + + @GetMapping("/vp") + public GetListUserApprovalResponse getUserVp(EmptyRequest emptyRequest) { + return getListUserVpService.execute(emptyRequest); + } + + @GetMapping("direktur-komite") + public GetListUserApprovalResponse getUserDirekturKomite(EmptyRequest emptyRequest) { + return getListUserDirekturKomiteService.execute(emptyRequest); + } + + @PostMapping + public EmptyResponse createDrpHasApproval(@RequestBody ListDrpApprovalRequest listDrpApprovalRequest) { + return postCreateDrpApprovalService.execute(listDrpApprovalRequest); + } + + @GetMapping + public GetListDrpApprovalResponse getListDrpApprovalResponse(@RequestParam(name = "search", required = false) String search, + @RequestParam(name = "page", defaultValue = "1") Integer page, + @RequestParam(name = "size", defaultValue = "5") Integer size) { + + Pageable pageable = PageRequest.of((page - 1), size); + DrpApprovalRequest drpApprovalRequest = DrpApprovalRequest.builder() + .search(search) + .pageable(pageable) + .build(); + return getListApprovalDrpServie.execute(drpApprovalRequest); + + } + + @PostMapping("/rekomendasi") + public DrpRekomendasiResponse drpRekomendasiResponse(@RequestBody DrpRekomendasiRequest drpRekomendasiRequest) { + return postDrpRekomendasiService.execute(drpRekomendasiRequest); + } + + @PostMapping("/execution") + public EmptyResponse drpApprovalExecution(@RequestBody DrpApprovalRequest drpApprovalRequest) { + return postDrpApprovalExecutionService.execute(drpApprovalRequest); + } + + @GetMapping("/jenis-pengadaan/{id}") + public DrpApprovalResponse getDrpApproval(@PathVariable(name = "id") Long id) { + return getApprovalService.execute(DrpApprovalRequest.builder() + .jenisPengadaanId(id) + .build()); + } + + @GetMapping("/rekomendasi/jenis-pengadaan/{id}") + public GetListDrpRekomendasiResponse getListRekomendasi(@PathVariable(name = "id") Long id, + @RequestParam(name = "page", defaultValue = "1") Integer page, + @RequestParam(name = "size", defaultValue = "5") Integer size) { + + Pageable pageable = PageRequest.of((page - 1), size); + DrpRekomendasiRequest drpRekomendasiRequest = DrpRekomendasiRequest.builder() + .jenisPengadaanId(id) + .pageable(pageable) + .build(); + + return getListRekomendasiService.execute(drpRekomendasiRequest); + } + + @GetMapping("/{id}/history") + public GetListDrpApprovalHistoryResponse getListDrpApprovalResponse(@PathVariable(name = "id") Long id) { + return getHistoryApprovalService.execute(DrpApprovalRequest.builder() + .drpId(id) + .build()); + } +} diff --git a/src/main/java/com/iconplus/smartproc/controller/AuthenticationController.java b/src/main/java/com/iconplus/smartproc/controller/AuthenticationController.java new file mode 100644 index 0000000..491fa80 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/controller/AuthenticationController.java @@ -0,0 +1,83 @@ +package com.iconplus.smartproc.controller; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.model.EmptyRequest; +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.model.request.*; +import com.iconplus.smartproc.model.response.GlobalResponse; +import com.iconplus.smartproc.model.response.InitForgotPasswordResponse; +import com.iconplus.smartproc.model.response.RefreshTokenResponse; +import com.iconplus.smartproc.service.authentication.*; +import org.springframework.web.bind.annotation.*; + +@CrossOrigin(origins = "${fe.server}", allowCredentials = "true") +@RestController +@RequestMapping("/api/authentication") +public class AuthenticationController { + + private final LoginService loginService; + private final TokenManagementService tokenManagementService; + private final LogoutService logoutService; + private final ChangePasswordService changePasswordService; + private final ForgotPasswordService forgotPasswordService; + private final InitForgotPasswordService initForgotPasswordService; + + public AuthenticationController(LoginService loginService, + TokenManagementService tokenManagementService, + LogoutService logoutService, + ChangePasswordService changePasswordService, + ForgotPasswordService forgotPasswordService, + InitForgotPasswordService initForgotPasswordService) { + this.loginService = loginService; + this.tokenManagementService = tokenManagementService; + this.logoutService = logoutService; + this.changePasswordService = changePasswordService; + this.forgotPasswordService = forgotPasswordService; + this.initForgotPasswordService = initForgotPasswordService; + } + + @PostMapping("/login") + public GlobalResponse getLoginResponse(@RequestBody LoginRequest loginRequest) { + try { + var loginResponse = loginService.execute(loginRequest); + return GlobalResponse.builder() + .isOk(true) + .message("Succes") + .data(loginResponse) + .build(); + } catch (BusinessException exception) { + return GlobalResponse.builder() + .isOk(false) + .message(exception.getErrorMessage()) + .build(); + } + } + + @PostMapping("/refresh-token") + public RefreshTokenResponse getRefreshToken(@RequestBody RefreshTokenRequest refreshTokenRequest) { + return tokenManagementService.execute(refreshTokenRequest); + } + + @PostMapping("/logout") + public EmptyResponse logoutUser(EmptyRequest request) { + return logoutService.execute(request); + + } + + @PostMapping("/change-password") + public EmptyResponse changePassword(@RequestBody ChangePasswordRequest changePasswordRequest) { + return changePasswordService.execute(changePasswordRequest); + } + + @PostMapping("/forgot-password") + public EmptyResponse forgotPassword(@RequestBody ForgotPasswordRequest forgotPasswordRequest) { + return forgotPasswordService.execute(forgotPasswordRequest); + } + + + @PostMapping("/init/forgot-password") + public InitForgotPasswordResponse initForgotPassword(@RequestBody InitForgotPasswordRequest initForgotPasswordRequest) { + return initForgotPasswordService.execute(initForgotPasswordRequest); + } + +} diff --git a/src/main/java/com/iconplus/smartproc/controller/BidangController.java b/src/main/java/com/iconplus/smartproc/controller/BidangController.java new file mode 100644 index 0000000..286143f --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/controller/BidangController.java @@ -0,0 +1,74 @@ +package com.iconplus.smartproc.controller; + +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.model.request.BidangRequest; +import com.iconplus.smartproc.model.response.BidangResponse; +import com.iconplus.smartproc.model.response.GetListBidangResponse; +import com.iconplus.smartproc.service.bidang.*; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.web.bind.annotation.*; + +@CrossOrigin(origins = "${fe.server}", allowCredentials = "true") +@RestController +@RequestMapping("/api/bidang") +public class BidangController { + + private GetBidangService getBidangService; + private DeleteBidangService deleteBidangService; + private GetListBidangService getListBidangService; + private PostCreateBidangService postCreateBidangService; + private PutUpdateBidangService putUpdateBidangService; + + public BidangController(GetBidangService getBidangService, + DeleteBidangService deleteBidangService, + GetListBidangService getListBidangService, + PostCreateBidangService postCreateBidangService, + PutUpdateBidangService putUpdateBidangService) { + this.getBidangService = getBidangService; + this.deleteBidangService = deleteBidangService; + this.getListBidangService = getListBidangService; + this.postCreateBidangService = postCreateBidangService; + this.putUpdateBidangService = putUpdateBidangService; + } + + @GetMapping + public GetListBidangResponse getListInstansi(@RequestParam(name = "search", required = false) String search, + @RequestParam(name = "page", defaultValue = "1") Integer page, + @RequestParam(name = "size", defaultValue = "5") Integer size){ + + Pageable pageable = PageRequest.of((page - 1), size); + BidangRequest bidangRequest = BidangRequest.builder() + .search(search) + .pageable(pageable) + .build(); + + return getListBidangService.execute(bidangRequest); + } + + @PostMapping + public BidangResponse createBidang(@RequestBody BidangRequest request) { + return postCreateBidangService.execute(request); + } + + @GetMapping("/{id}") + public BidangResponse getBidangById(@PathVariable Long id) { + return getBidangService.execute(BidangRequest.builder() + .id(id) + .build()); + } + + @PutMapping("/{id}") + public BidangResponse updateBidang(@PathVariable Long id, @RequestBody BidangRequest request){ + request.setId(id); + return putUpdateBidangService.execute(request); + } + + @DeleteMapping("/{id}") + public EmptyResponse deleteBidang(@PathVariable Long id){ + return deleteBidangService.execute(BidangRequest.builder() + .id(id) + .build()); + } + +} diff --git a/src/main/java/com/iconplus/smartproc/controller/DrpController.java b/src/main/java/com/iconplus/smartproc/controller/DrpController.java new file mode 100644 index 0000000..58eaee7 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/controller/DrpController.java @@ -0,0 +1,122 @@ +package com.iconplus.smartproc.controller; + +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.model.request.DrpDokumenRequest; +import com.iconplus.smartproc.model.request.DrpRekomendasiRequest; +import com.iconplus.smartproc.model.request.DrpRequest; +import com.iconplus.smartproc.model.response.*; +import com.iconplus.smartproc.service.drp.*; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; + +@CrossOrigin(origins = "${fe.server}", allowCredentials = "true") +@RestController +@RequestMapping("/api/drp") +public class DrpController { + + private final GetDrpService getDrpService; + private final GetListDrpService getListDrpService; + private final PostDrpUploadDokumenRKAPService postDrpUploadDokumenRKAPService; + private final PostCreateTahunDrpService postCreateTahunDrpService; + private final DeleteDokumenUploadService deleteDokumenUploadService; + private final PostCreateDrpService postCreateDrpService; + private final EditUploadDokumenDrpService editUploadDokumenDrpService; + private final GetListDrpRekomendasiService getListDrpRekomendasiService; + + public DrpController(GetDrpService getDrpService, + GetListDrpService getListDrpService, + PostDrpUploadDokumenRKAPService postDrpUploadDokumenRKAPService, + PostCreateTahunDrpService postCreateTahunDrpService, + DeleteDokumenUploadService deleteDokumenUploadService, + PostCreateDrpService postCreateDrpService, + EditUploadDokumenDrpService editUploadDokumenDrpService, + GetListDrpRekomendasiService getListDrpRekomendasiService) { + this.getDrpService = getDrpService; + this.getListDrpService = getListDrpService; + this.postDrpUploadDokumenRKAPService = postDrpUploadDokumenRKAPService; + this.postCreateTahunDrpService = postCreateTahunDrpService; + this.deleteDokumenUploadService = deleteDokumenUploadService; + this.postCreateDrpService = postCreateDrpService; + this.editUploadDokumenDrpService = editUploadDokumenDrpService; + this.getListDrpRekomendasiService = getListDrpRekomendasiService; + } + + @GetMapping + public GetListDrpResponse getListDrp(@RequestParam(name = "search", required = false) String search, + @RequestParam(name = "page", defaultValue = "1") Integer page, + @RequestParam(name = "size", defaultValue = "5") Integer size){ + + Pageable pageable = PageRequest.of((page - 1), size); + DrpRequest drpRequest = DrpRequest.builder() + .search(search) + .pageable(pageable) + .build(); + + return getListDrpService.execute(drpRequest); + } + + @GetMapping("/{id}") + public DrpResponse getDrp(@PathVariable Long id) { + return getDrpService.execute(DrpRequest.builder() + .id(id) + .build()); + } + + @PostMapping("/tahun") + public DrpResponse createTahunDrp(@RequestBody DrpRequest drpRequest) { + return postCreateTahunDrpService.execute(drpRequest); + } + + @PostMapping + public DrpResponse createDrp(@RequestBody DrpRequest drpRequest) { + return postCreateDrpService.execute(drpRequest); + } + + + @PostMapping("/upload/dokumen") + public DrpDokumenResponse uploadDokumenRkap(@RequestParam(name = "jenisDokumenId") Long jenisDokumenId, + @RequestParam(name = "keterangan") String keterangan, + @RequestParam(name = "file") MultipartFile file) throws IOException { + return postDrpUploadDokumenRKAPService.execute(DrpDokumenRequest.builder() + .jenisDokumenId(jenisDokumenId) + .keterangan(keterangan) + .file(file) + .build()); + } + + @DeleteMapping("/upload/dokumen") + public EmptyResponse deleteDokumenRkap(@RequestBody DrpDokumenRequest drpDokumenRequest) { + return deleteDokumenUploadService.execute(drpDokumenRequest); + } + + @PutMapping("/upload/dokumen") + public DrpDokumenResponse editUploadDrpDokumen(@RequestParam(name = "filename") String filename, + @RequestParam(name = "jenisDokumenId") Long jenisDokumenId, + @RequestParam(name = "keterangan") String keterangan, + @RequestParam(name = "file") MultipartFile file) { + return editUploadDokumenDrpService.execute(DrpDokumenRequest.builder() + .filename(filename) + .jenisDokumenId(jenisDokumenId) + .keterangan(keterangan) + .file(file) + .build()); + } + + @GetMapping("/{id}/rekomendasi") + public GetListDrpRekomendasiResponse getListDrpRekomendasiResponse(@PathVariable(name = "id") Long id, + @RequestParam(name = "page", defaultValue = "1") Integer page, + @RequestParam(name = "size", defaultValue = "5") Integer size) { + Pageable pageable = PageRequest.of((page - 1), size); + DrpRekomendasiRequest drpRekomendasiRequest = DrpRekomendasiRequest.builder() + .drpId(id) + .pageable(pageable) + .build(); + + return getListDrpRekomendasiService.execute(drpRekomendasiRequest); + } + +} diff --git a/src/main/java/com/iconplus/smartproc/controller/DrpPengadaanController.java b/src/main/java/com/iconplus/smartproc/controller/DrpPengadaanController.java new file mode 100644 index 0000000..450cae0 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/controller/DrpPengadaanController.java @@ -0,0 +1,113 @@ +package com.iconplus.smartproc.controller; + +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.model.request.DrpPengadaanDokumenRequest; +import com.iconplus.smartproc.model.request.DrpPengadaanRequest; +import com.iconplus.smartproc.model.response.*; +import com.iconplus.smartproc.service.drppengadaan.*; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; + +@CrossOrigin(origins = "${fe.server}", allowCredentials = "true") +@RestController +@RequestMapping("/api/drp/pengadaan") +public class DrpPengadaanController { + + private final PostCreateDrpPengadaanService postCreateDrpPengadaanService; + private final GetListDrpPengadaanService getListDrpPengadaanService; + private final PostDrpUploadDokumenPendukungService postDrpUploadDokumenPendukungService; + private final DeleteDrpPengadaanService deleteDrpPengadaanService; + private final DeleteDokumenPendukungService deleteDokumenPendukungService; + private final EditUploadDrpPengadaanService editUploadDrpPengadaanService; + private final GetDrpPengadaanService getDrpPengadaanService; + private final PutDrpPengadaanService putDrpPengadaanService; + + public DrpPengadaanController(PostCreateDrpPengadaanService postCreateDrpPengadaanService, + GetListDrpPengadaanService getListDrpPengadaanService, + PostDrpUploadDokumenPendukungService postDrpUploadDokumenPendukungService, + DeleteDrpPengadaanService deleteDrpPengadaanService, + DeleteDokumenPendukungService deleteDokumenPendukungService, + EditUploadDrpPengadaanService editUploadDrpPengadaanService, + GetDrpPengadaanService getDrpPengadaanService, + PutDrpPengadaanService putDrpPengadaanService) { + this.postCreateDrpPengadaanService = postCreateDrpPengadaanService; + this.getListDrpPengadaanService = getListDrpPengadaanService; + this.postDrpUploadDokumenPendukungService = postDrpUploadDokumenPendukungService; + this.deleteDrpPengadaanService = deleteDrpPengadaanService; + this.deleteDokumenPendukungService = deleteDokumenPendukungService; + this.editUploadDrpPengadaanService = editUploadDrpPengadaanService; + this.getDrpPengadaanService = getDrpPengadaanService; + this.putDrpPengadaanService = putDrpPengadaanService; + } + + @GetMapping("/list/{id}") + public GetListDrpPengadaanResponse getDrpPengadaan(@PathVariable(name = "id") Long drpId, + @RequestParam(name = "page", defaultValue = "1") Integer page, + @RequestParam(name = "size", defaultValue = "5") Integer size){ + + Pageable pageable = PageRequest.of((page - 1), size); + DrpPengadaanRequest drpPengadaanRequest = DrpPengadaanRequest.builder() + .drpId(drpId) + .pageable(pageable) + .build(); + return getListDrpPengadaanService.execute(drpPengadaanRequest); + } + + @PostMapping + public DrpPengadaanResponse createDrpPengadaan(@RequestBody DrpPengadaanRequest drpPengadaanRequest) { + return postCreateDrpPengadaanService.execute(drpPengadaanRequest); + } + + @GetMapping("/{id}") + public DrpPengadaanResponse getDrpPengadaanById(@PathVariable Long id) { + return getDrpPengadaanService.execute(DrpPengadaanRequest.builder() + .id(id) + .build()); + } + + @PutMapping("/{id}") + public DrpPengadaanResponse updateDrpPengadaan(@PathVariable Long id, + @RequestBody DrpPengadaanRequest drpPengadaanRequest) throws IOException { + drpPengadaanRequest.setId(id); + return putDrpPengadaanService.execute(drpPengadaanRequest); + } + + @DeleteMapping("/{id}") + public EmptyResponse deleteDrpPengadaan(@RequestBody DrpPengadaanRequest drpPengadaanRequest) { + return deleteDrpPengadaanService.execute(drpPengadaanRequest); + } + + @PostMapping("/upload/dokumen") + public DrpPengadaanDokumenResponse uploadDokumenPendukung(@RequestParam(name = "jenisDokumenId") Long jenisDokumenId, + @RequestParam(name = "keterangan") String keterangan, + @RequestParam(name = "file") MultipartFile file) throws IOException { + return postDrpUploadDokumenPendukungService.execute(DrpPengadaanDokumenRequest.builder() + .jenisDokumenId(jenisDokumenId) + .keterangan(keterangan) + .file(file) + .build()); + } + + @PutMapping("/upload/dokumen") + public DrpPengadaanDokumenResponse editUploadDrpDokumen(@RequestParam(name = "filename") String filename, + @RequestParam(name = "jenisDokumenId") Long jenisDokumenId, + @RequestParam(name = "keterangan") String keterangan, + @RequestParam(name = "file") MultipartFile file) { + return editUploadDrpPengadaanService.execute(DrpPengadaanDokumenRequest.builder() + .filename(filename) + .jenisDokumenId(jenisDokumenId) + .keterangan(keterangan) + .file(file) + .build()); + } + + @DeleteMapping("/upload/dokumen") + public EmptyResponse deleteDokumenPendukung(@RequestBody DrpPengadaanDokumenRequest drpPengadaanDokumenRequest) { + return deleteDokumenPendukungService.execute(drpPengadaanDokumenRequest); + } + +} diff --git a/src/main/java/com/iconplus/smartproc/controller/InstansiController.java b/src/main/java/com/iconplus/smartproc/controller/InstansiController.java new file mode 100644 index 0000000..b094a85 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/controller/InstansiController.java @@ -0,0 +1,74 @@ +package com.iconplus.smartproc.controller; + +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.model.request.InstansiRequest; +import com.iconplus.smartproc.model.response.GetListInstansiResponse; +import com.iconplus.smartproc.model.response.InstansiResponse; +import com.iconplus.smartproc.service.instansi.*; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.web.bind.annotation.*; + +@CrossOrigin(origins = "${fe.server}", allowCredentials = "true") +@RestController +@RequestMapping("/api/instansi") +public class InstansiController { + + private final GetListInstansiService getListInstansiService; + private final PostCreateInstansiService postCreateInstansiService; + private final PutUpdateInstansiService putUpdateInstansiService; + private final GetInstansiByIdService getInstansiByIdService; + private final DeleteInstansiService deleteInstansiService; + + public InstansiController(GetListInstansiService getListInstansiService, + PostCreateInstansiService postCreateInstansiService, + PutUpdateInstansiService putUpdateInstansiService, + GetInstansiByIdService getInstansiByIdService, + DeleteInstansiService deleteInstansiService) { + this.getListInstansiService = getListInstansiService; + this.postCreateInstansiService = postCreateInstansiService; + this.putUpdateInstansiService = putUpdateInstansiService; + this.getInstansiByIdService = getInstansiByIdService; + this.deleteInstansiService = deleteInstansiService; + + } + + @GetMapping + public GetListInstansiResponse getListInstansi(@RequestParam(name = "search", required = false) String search, + @RequestParam(name = "page", defaultValue = "1") Integer page, + @RequestParam(name = "size", defaultValue = "5") Integer size){ + + Pageable pageable = PageRequest.of((page - 1), size); + InstansiRequest instansiRequest = InstansiRequest.builder() + .search(search) + .pageable(pageable) + .build(); + + return getListInstansiService.execute(instansiRequest); + } + + @PostMapping + public InstansiResponse createInstansi(@RequestBody InstansiRequest request) { + return postCreateInstansiService.execute(request); + } + + @GetMapping("/{id}") + public InstansiResponse getInstansiById(@PathVariable Long id) { + return getInstansiByIdService.execute(InstansiRequest.builder() + .id(id) + .build()); + } + + @PutMapping("/{id}") + public InstansiResponse updateInstansi(@PathVariable Long id, @RequestBody InstansiRequest request){ + request.setId(id); + return putUpdateInstansiService.execute(request); + } + + @DeleteMapping("/{id}") + public EmptyResponse deleteInstansi(@PathVariable Long id){ + return deleteInstansiService.execute(InstansiRequest.builder() + .id(id) + .build()); + } +} diff --git a/src/main/java/com/iconplus/smartproc/controller/JabatanController.java b/src/main/java/com/iconplus/smartproc/controller/JabatanController.java new file mode 100644 index 0000000..3a051ce --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/controller/JabatanController.java @@ -0,0 +1,73 @@ +package com.iconplus.smartproc.controller; + +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.model.request.JabatanRequest; +import com.iconplus.smartproc.model.response.GetListJabatanResponse; +import com.iconplus.smartproc.model.response.JabatanResponse; +import com.iconplus.smartproc.service.jabatan.*; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.web.bind.annotation.*; + +@CrossOrigin(origins = "${fe.server}", allowCredentials = "true") +@RestController +@RequestMapping("/api/jabatan") +public class JabatanController { + + private DeleteJabatanService deleteJabatanService; + private GetJabatanService getJabatanService; + private GetListJabatanService getListJabatanService; + private PostCreateJabatanService postCreateJabatanService; + private PutUpdateJabatanService putUpdateJabatanService; + + public JabatanController(DeleteJabatanService deleteJabatanService, + GetJabatanService getJabatanService, + GetListJabatanService getListJabatanService, + PostCreateJabatanService postCreateJabatanService, + PutUpdateJabatanService putUpdateJabatanService) { + this.deleteJabatanService = deleteJabatanService; + this.getJabatanService = getJabatanService; + this.getListJabatanService = getListJabatanService; + this.postCreateJabatanService = postCreateJabatanService; + this.putUpdateJabatanService = putUpdateJabatanService; + } + + @GetMapping + public GetListJabatanResponse getListJabatan(@RequestParam(name = "search", required = false) String search, + @RequestParam(name = "page", defaultValue = "1") Integer page, + @RequestParam(name = "size", defaultValue = "5") Integer size){ + + Pageable pageable = PageRequest.of((page - 1), size); + JabatanRequest bidangRequest = JabatanRequest.builder() + .search(search) + .pageable(pageable) + .build(); + + return getListJabatanService.execute(bidangRequest); + } + + @PostMapping + public JabatanResponse createJabatan(@RequestBody JabatanRequest request) { + return postCreateJabatanService.execute(request); + } + + @GetMapping("/{id}") + public JabatanResponse getJabatanById(@PathVariable Long id) { + return getJabatanService.execute(JabatanRequest.builder() + .id(id) + .build()); + } + + @PutMapping("/{id}") + public JabatanResponse updateBidang(@PathVariable Long id, @RequestBody JabatanRequest request){ + request.setId(id); + return putUpdateJabatanService.execute(request); + } + + @DeleteMapping("/{id}") + public EmptyResponse deleteJabatan(@PathVariable Long id){ + return deleteJabatanService.execute(JabatanRequest.builder() + .id(id) + .build()); + } +} diff --git a/src/main/java/com/iconplus/smartproc/controller/JenisAnggaranController.java b/src/main/java/com/iconplus/smartproc/controller/JenisAnggaranController.java new file mode 100644 index 0000000..82e34d0 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/controller/JenisAnggaranController.java @@ -0,0 +1,77 @@ +package com.iconplus.smartproc.controller; + + +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.model.request.JenisAnggaranRequest; +import com.iconplus.smartproc.model.response.GetListJenisAnggaranResponse; +import com.iconplus.smartproc.model.response.JenisAnggaranResponse; +import com.iconplus.smartproc.service.jenisanggaran.*; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.web.bind.annotation.*; + +@CrossOrigin(origins = "${fe.server}", allowCredentials = "true") +@RestController +@RequestMapping("/api/jenisanggaran") +public class JenisAnggaranController { + + private final GetListJenisAnggaranService getListJenisAnggaranService; + private final GetJenisAnggaranByIdService getJenisAnggaranByIdService; + private final PostCreateJenisAnggaranService postCreateJenisAnggaranService; + private final PutUpdateJenisAnggaranService putUpdateJenisAnggaranService; + private final DeleteJenisAnggaranService deleteJenisAnggaranService; + + public JenisAnggaranController(GetListJenisAnggaranService getListJenisAnggaranService, + GetJenisAnggaranByIdService getJenisAnggaranByIdService, + PostCreateJenisAnggaranService postCreateJenisAnggaranService, + PutUpdateJenisAnggaranService putUpdateJenisAnggaranService, + DeleteJenisAnggaranService deleteJenisAnggaranService) { + this.getListJenisAnggaranService = getListJenisAnggaranService; + this.getJenisAnggaranByIdService = getJenisAnggaranByIdService; + this.postCreateJenisAnggaranService = postCreateJenisAnggaranService; + this.putUpdateJenisAnggaranService = putUpdateJenisAnggaranService; + this.deleteJenisAnggaranService = deleteJenisAnggaranService; + } + + + @GetMapping + public GetListJenisAnggaranResponse getListJenisAnggaran(@RequestParam(name = "search", required = false) String search, + @RequestParam(name = "page", defaultValue = "1") Integer page, + @RequestParam(name = "size", defaultValue = "5") Integer size){ + + Pageable pageable = PageRequest.of((page - 1), size); + JenisAnggaranRequest jenisAnggaranRequest = JenisAnggaranRequest.builder() + .search(search) + .pageable(pageable) + .build(); + + return getListJenisAnggaranService.execute(jenisAnggaranRequest); + } + + @PostMapping + public JenisAnggaranResponse createJenisAnggaran(@RequestBody JenisAnggaranRequest jenisAnggaranRequest) { + return postCreateJenisAnggaranService.execute(jenisAnggaranRequest); + } + + @GetMapping("/{id}") + public JenisAnggaranResponse getJenisAnggaranById(@PathVariable Long id) { + return getJenisAnggaranByIdService.execute(JenisAnggaranRequest.builder() + .id(id) + .build()); + } + + + @PutMapping("/{id}") + public JenisAnggaranResponse updateJenisanggaran(@PathVariable Long id, + @RequestBody JenisAnggaranRequest jenisAnggaranRequest){ + jenisAnggaranRequest.setId(id); + return putUpdateJenisAnggaranService.execute(jenisAnggaranRequest); + } + + @DeleteMapping("/{id}") + public EmptyResponse deleteJenisAnggaran(@PathVariable Long id) { + return deleteJenisAnggaranService.execute(JenisAnggaranRequest.builder() + .id(id) + .build()); + } +} diff --git a/src/main/java/com/iconplus/smartproc/controller/JenisKontrakController.java b/src/main/java/com/iconplus/smartproc/controller/JenisKontrakController.java new file mode 100644 index 0000000..54e9637 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/controller/JenisKontrakController.java @@ -0,0 +1,77 @@ +package com.iconplus.smartproc.controller; + + +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.model.request.JenisKontrakRequest; +import com.iconplus.smartproc.model.response.GetListJenisKontrakResponse; +import com.iconplus.smartproc.model.response.JenisKontrakResponse; +import com.iconplus.smartproc.service.jeniskontrak.*; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.web.bind.annotation.*; + +@CrossOrigin(origins = "${fe.server}", allowCredentials = "true") +@RestController +@RequestMapping("/api/jeniskontrak") +public class JenisKontrakController { + + private final GetListJenisKontrakService getListJenisKontrakService; + private final GetJenisKontrakByIdService getJenisKontrakByIdService; + private final PostCreateJenisKontrakService postCreateJenisKontrakService; + private final PutUpdateJenisKontrakService putUpdateJenisKontrakService; + private final DeleteJenisKontrakService deleteJenisKontrakService; + + public JenisKontrakController(GetListJenisKontrakService getListJenisKontrakService, + GetJenisKontrakByIdService getJenisKontrakByIdService, + PostCreateJenisKontrakService postCreateJenisKontrakService, + PutUpdateJenisKontrakService putUpdateJenisKontrakService, + DeleteJenisKontrakService deleteJenisKontrakService) { + this.getListJenisKontrakService = getListJenisKontrakService; + this.getJenisKontrakByIdService = getJenisKontrakByIdService; + this.postCreateJenisKontrakService = postCreateJenisKontrakService; + this.putUpdateJenisKontrakService = putUpdateJenisKontrakService; + this.deleteJenisKontrakService = deleteJenisKontrakService; + } + + + @GetMapping + public GetListJenisKontrakResponse getListJenisKontrak(@RequestParam(name = "search", required = false) String search, + @RequestParam(name = "page", defaultValue = "1") Integer page, + @RequestParam(name = "size", defaultValue = "5") Integer size){ + + Pageable pageable = PageRequest.of((page - 1), size); + JenisKontrakRequest jenisKontrakRequest = JenisKontrakRequest.builder() + .search(search) + .pageable(pageable) + .build(); + + return getListJenisKontrakService.execute(jenisKontrakRequest); + } + + @PostMapping + public JenisKontrakResponse createJenisKontrak(@RequestBody JenisKontrakRequest jenisKontrakRequest) { + return postCreateJenisKontrakService.execute(jenisKontrakRequest); + } + + @GetMapping("/{id}") + public JenisKontrakResponse getJenisKontrakById(@PathVariable Long id) { + return getJenisKontrakByIdService.execute(JenisKontrakRequest.builder() + .id(id) + .build()); + } + + + @PutMapping("/{id}") + public JenisKontrakResponse updateJeniskontrak(@PathVariable Long id, + @RequestBody JenisKontrakRequest jenisKontrakRequest){ + jenisKontrakRequest.setId(id); + return putUpdateJenisKontrakService.execute(jenisKontrakRequest); + } + + @DeleteMapping("/{id}") + public EmptyResponse deleteJenisKontrak(@PathVariable Long id) { + return deleteJenisKontrakService.execute(JenisKontrakRequest.builder() + .id(id) + .build()); + } +} diff --git a/src/main/java/com/iconplus/smartproc/controller/JenisPengadaanController.java b/src/main/java/com/iconplus/smartproc/controller/JenisPengadaanController.java new file mode 100644 index 0000000..11454f7 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/controller/JenisPengadaanController.java @@ -0,0 +1,75 @@ +package com.iconplus.smartproc.controller; + +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.model.request.JenisPengadaanRequest; +import com.iconplus.smartproc.model.response.GetListJenisPengadaanResponse; +import com.iconplus.smartproc.model.response.JenisPengadaanResponse; +import com.iconplus.smartproc.service.jenispengadaan.*; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.web.bind.annotation.*; + +@CrossOrigin(origins = "${fe.server}", allowCredentials = "true") +@RestController +@RequestMapping("/api/jenispengadaan") +public class JenisPengadaanController { + + private final GetListJenisPengadaanService getListJenisPengadaanService; + private final GetJenisPengadaanService getJenisPengadaanService; + private final PostCreateJenisPengadaanService postCreateJenisPengadaanService; + private final DeleteJenisPengadaanService deleteJenisPengadaanService; + private final PutUpdateJenisPengadaanService putUpdateJenisPengadaanService; + + public JenisPengadaanController(GetListJenisPengadaanService getListJenisPengadaanService, + GetJenisPengadaanService getJenisPengadaanService, + PostCreateJenisPengadaanService postCreateJenisPengadaanService, + DeleteJenisPengadaanService deleteJenisPengadaanService, + PutUpdateJenisPengadaanService putUpdateJenisPengadaanService) { + this.getListJenisPengadaanService = getListJenisPengadaanService; + this.getJenisPengadaanService = getJenisPengadaanService; + this.postCreateJenisPengadaanService = postCreateJenisPengadaanService; + this.deleteJenisPengadaanService = deleteJenisPengadaanService; + this.putUpdateJenisPengadaanService = putUpdateJenisPengadaanService; + } + + @GetMapping + public GetListJenisPengadaanResponse getListJenisPengadaan(@RequestParam(name = "search", required = false) String search, + @RequestParam(name = "page", defaultValue = "1") Integer page, + @RequestParam(name = "size", defaultValue = "5") Integer size){ + + Pageable pageable = PageRequest.of((page - 1), size); + JenisPengadaanRequest jenisPengadaanRequest = JenisPengadaanRequest.builder() + .search(search) + .pageable(pageable) + .build(); + + return getListJenisPengadaanService.execute(jenisPengadaanRequest); + } + + @PostMapping + public JenisPengadaanResponse createJenisPengadaan(@RequestBody JenisPengadaanRequest jenisPengadaanRequest) { + return postCreateJenisPengadaanService.execute(jenisPengadaanRequest); + } + + @GetMapping("/{id}") + public JenisPengadaanResponse getJenisPengadaannById(@PathVariable Long id) { + return getJenisPengadaanService.execute(JenisPengadaanRequest.builder() + .id(id) + .build()); + } + + + @PutMapping("/{id}") + public JenisPengadaanResponse updateJenisPengadaan(@PathVariable Long id, + @RequestBody JenisPengadaanRequest jenisPengadaanRequest){ + jenisPengadaanRequest.setId(id); + return putUpdateJenisPengadaanService.execute(jenisPengadaanRequest); + } + + @DeleteMapping("/{id}") + public EmptyResponse deleteJenisAnggaran(@PathVariable Long id) { + return deleteJenisPengadaanService.execute(JenisPengadaanRequest.builder() + .id(id) + .build()); + } +} diff --git a/src/main/java/com/iconplus/smartproc/controller/JenisanggaranController.java b/src/main/java/com/iconplus/smartproc/controller/JenisanggaranController.java deleted file mode 100644 index 7f539a1..0000000 --- a/src/main/java/com/iconplus/smartproc/controller/JenisanggaranController.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.iconplus.smartproc.controller; - -import com.iconplus.smartproc.entity.Jenisanggaran; -import com.iconplus.smartproc.exception.ResourceNotFoundException; -import com.iconplus.smartproc.repository.JenisanggaranRepository; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.*; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@CrossOrigin(origins = "http://localhost:8080", allowCredentials = "true") -@RestController -@RequestMapping("/api/jenisanggaran") -public class JenisanggaranController { - @Autowired - private JenisanggaranRepository jenisanggaranRepository; - - //get all data - @GetMapping - public List getAllJenisanggarans(){ - return jenisanggaranRepository.findAll(); - } - - // create - @PostMapping - public Jenisanggaran createJenisanggaran(@RequestBody Jenisanggaran jenisanggaran) { - return jenisanggaranRepository.save(jenisanggaran); - } - - // get jenisanggaran by id rest api - @GetMapping("/{id}") - public ResponseEntity getJenisanggaranById(@PathVariable Long id) { - Jenisanggaran jenisanggaran = jenisanggaranRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Jenisanggaran not exist with id :" + id)); - return ResponseEntity.ok(jenisanggaran); - } - - // update jenisanggaran rest api - @PutMapping("/{id}") - public ResponseEntity updateJenisanggaran(@PathVariable Long id, @RequestBody Jenisanggaran jenisanggaranDetails){ - Jenisanggaran jenisanggaran = jenisanggaranRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Jenisanggaran not exist with id :" + id)); - - jenisanggaran.setJenisanggaran(jenisanggaranDetails.getJenisanggaran()); - jenisanggaran.setKeterangan(jenisanggaranDetails.getKeterangan()); - - Jenisanggaran updatedJenisanggaran = jenisanggaranRepository.save(jenisanggaran); - return ResponseEntity.ok(updatedJenisanggaran); - } - - // delete jenisanggaran rest api - @DeleteMapping("/{id}") - public ResponseEntity> deleteJenisanggaran(@PathVariable Long id){ - Jenisanggaran jenisanggaran = jenisanggaranRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Supposmatrix not exist with id :" + id)); - - jenisanggaranRepository.delete(jenisanggaran); - Map response = new HashMap<>(); - response.put("deleted", Boolean.TRUE); - return ResponseEntity.ok(response); - } -} diff --git a/src/main/java/com/iconplus/smartproc/controller/JeniskontrakController.java b/src/main/java/com/iconplus/smartproc/controller/JeniskontrakController.java deleted file mode 100644 index 26be349..0000000 --- a/src/main/java/com/iconplus/smartproc/controller/JeniskontrakController.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.iconplus.smartproc.controller; - -import com.iconplus.smartproc.entity.Jeniskontrak; -import com.iconplus.smartproc.exception.ResourceNotFoundException; -import com.iconplus.smartproc.repository.JeniskontrakRepository; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.*; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@CrossOrigin(origins = "http://localhost:8080", allowCredentials = "true") -@RestController -@RequestMapping("/api/jeniskontrak") -public class JeniskontrakController { - @Autowired - private JeniskontrakRepository jeniskontrakRepository; - - //get all data - @GetMapping - public List getAllJeniskontraks(){ - return jeniskontrakRepository.findAll(); - } - - // create - @PostMapping - public Jeniskontrak createJeniskontrak(@RequestBody Jeniskontrak jeniskontrak) { - return jeniskontrakRepository.save(jeniskontrak); - } - - // get jeniskontrak by id rest api - @GetMapping("/{id}") - public ResponseEntity getJeniskontrakById(@PathVariable Long id) { - Jeniskontrak jeniskontrak = jeniskontrakRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Jeniskontrak not exist with id :" + id)); - return ResponseEntity.ok(jeniskontrak); - } - - // update jeniskontrak rest api - @PutMapping("/{id}") - public ResponseEntity updateJeniskontrak(@PathVariable Long id, @RequestBody Jeniskontrak jeniskontrakDetails){ - Jeniskontrak jeniskontrak = jeniskontrakRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Jeniskontrak not exist with id :" + id)); - - jeniskontrak.setJeniskontrak(jeniskontrakDetails.getJeniskontrak()); - jeniskontrak.setKeterangan(jeniskontrakDetails.getKeterangan()); - - Jeniskontrak updatedJeniskontrak = jeniskontrakRepository.save(jeniskontrak); - return ResponseEntity.ok(updatedJeniskontrak); - } - - // delete jeniskontrak rest api - @DeleteMapping("/{id}") - public ResponseEntity> deleteJeniskontrak(@PathVariable Long id){ - Jeniskontrak jeniskontrak = jeniskontrakRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Jeniskontrak not exist with id :" + id)); - - jeniskontrakRepository.delete(jeniskontrak); - Map response = new HashMap<>(); - response.put("deleted", Boolean.TRUE); - return ResponseEntity.ok(response); - } -} \ No newline at end of file diff --git a/src/main/java/com/iconplus/smartproc/controller/JenispengadaanController.java b/src/main/java/com/iconplus/smartproc/controller/JenispengadaanController.java deleted file mode 100644 index 96eeef3..0000000 --- a/src/main/java/com/iconplus/smartproc/controller/JenispengadaanController.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.iconplus.smartproc.controller; - -import com.iconplus.smartproc.entity.Jenispengadaan; -import com.iconplus.smartproc.exception.ResourceNotFoundException; -import com.iconplus.smartproc.repository.JenispengadaanRepository; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.*; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@CrossOrigin(origins = "http://localhost:8080", allowCredentials = "true") -@RestController -@RequestMapping("/api/jenispengadaan") -public class JenispengadaanController { - @Autowired - private JenispengadaanRepository jenispengadaanRepository; - - //get all data - @GetMapping - public List getAllJenispengadaans(){ - return jenispengadaanRepository.findAll(); - } - - // create - @PostMapping - public Jenispengadaan createJenispengadaan(@RequestBody Jenispengadaan jenispengadaan) { - return jenispengadaanRepository.save(jenispengadaan); - } - - // get jenispengadaan by id rest api - @GetMapping("/{id}") - public ResponseEntity getJenispengadaanById(@PathVariable Long id) { - Jenispengadaan jenispengadaan = jenispengadaanRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Jenispengadaan not exist with id :" + id)); - return ResponseEntity.ok(jenispengadaan); - } - - // update jenispengadaan rest api - @PutMapping("/{id}") - public ResponseEntity updateJenispengadaan(@PathVariable Long id, @RequestBody Jenispengadaan jenispengadaanDetails){ - Jenispengadaan jenispengadaan = jenispengadaanRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Jenispengadaan not exist with id :" + id)); - - jenispengadaan.setJenispengadaan(jenispengadaanDetails.getJenispengadaan()); - jenispengadaan.setKeterangan(jenispengadaanDetails.getKeterangan()); - - Jenispengadaan updatedJenispengadaan = jenispengadaanRepository.save(jenispengadaan); - return ResponseEntity.ok(updatedJenispengadaan); - } - - // delete jenispengadaan rest api - @DeleteMapping("/{id}") - public ResponseEntity> deleteJenispengadaan(@PathVariable Long id){ - Jenispengadaan jenispengadaan = jenispengadaanRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Supposmatrix not exist with id :" + id)); - - jenispengadaanRepository.delete(jenispengadaan); - Map response = new HashMap<>(); - response.put("deleted", Boolean.TRUE); - return ResponseEntity.ok(response); - } -} diff --git a/src/main/java/com/iconplus/smartproc/controller/LokasiController.java b/src/main/java/com/iconplus/smartproc/controller/LokasiController.java index 4af3fb4..2c8250b 100644 --- a/src/main/java/com/iconplus/smartproc/controller/LokasiController.java +++ b/src/main/java/com/iconplus/smartproc/controller/LokasiController.java @@ -1,69 +1,77 @@ package com.iconplus.smartproc.controller; -import com.iconplus.smartproc.entity.Lokasi; -import com.iconplus.smartproc.exception.ResourceNotFoundException; -import com.iconplus.smartproc.repository.LokasiRepository; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.ResponseEntity; + +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.model.request.LokasiRequest; +import com.iconplus.smartproc.model.response.GetListLokasiResponse; +import com.iconplus.smartproc.model.response.LokasiResponse; +import com.iconplus.smartproc.service.lokasi.*; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; import org.springframework.web.bind.annotation.*; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@CrossOrigin(origins = "http://localhost:8080", allowCredentials = "true") +@CrossOrigin(origins = "${fe.server}", allowCredentials = "true") @RestController @RequestMapping("/api/lokasi") public class LokasiController { - @Autowired - private LokasiRepository lokasiRepository; - //get all data + private final GetListLokasiService getListLokasiService; + private final GetLokasiByIdService getLokasiByIdService; + private final PostCreateLokasiService postCreateLokasiService; + private final PutUpdateLokasiService putUpdateLokasiService; + private final DeleteLokasiService deleteLokasiService; + + public LokasiController(GetListLokasiService getListLokasiService, + GetLokasiByIdService getLokasiByIdService, + PostCreateLokasiService postCreateLokasiService, + PutUpdateLokasiService putUpdateLokasiService, + DeleteLokasiService deleteLokasiService) { + this.getListLokasiService = getListLokasiService; + this.getLokasiByIdService = getLokasiByIdService; + this.postCreateLokasiService = postCreateLokasiService; + this.putUpdateLokasiService = putUpdateLokasiService; + this.deleteLokasiService = deleteLokasiService; + } + + @GetMapping - public List getAllLokasis(){ - return lokasiRepository.findAll(); + public GetListLokasiResponse getListLokasi(@RequestParam(name = "search", required = false) String search, + @RequestParam(name = "page", defaultValue = "1") Integer page, + @RequestParam(name = "size", defaultValue = "5") Integer size){ + + Pageable pageable = PageRequest.of((page - 1), size); + LokasiRequest lokasiRequest = LokasiRequest.builder() + .search(search) + .pageable(pageable) + .build(); + + return getListLokasiService.execute(lokasiRequest); } - // create @PostMapping - public Lokasi createLokasi(@RequestBody Lokasi lokasi) { - return lokasiRepository.save(lokasi); + public LokasiResponse createLokasi(@RequestBody LokasiRequest lokasiRequest) { + return postCreateLokasiService.execute(lokasiRequest); } - // get lokasi by id rest api @GetMapping("/{id}") - public ResponseEntity getLokasiById(@PathVariable Long id) { - Lokasi lokasi = lokasiRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Lokasi not exist with id :" + id)); - return ResponseEntity.ok(lokasi); + public LokasiResponse getLokasiById(@PathVariable Long id) { + return getLokasiByIdService.execute(LokasiRequest.builder() + .id(id) + .build()); } - // update lokasi rest api + @PutMapping("/{id}") - public ResponseEntity updateSumberdana(@PathVariable Long id, @RequestBody Lokasi lokasiDetails){ - Lokasi lokasi = lokasiRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Lokasi not exist with id :" + id)); - - lokasi.setLokasi(lokasiDetails.getLokasi()); - lokasi.setKeterangan(lokasiDetails.getKeterangan()); - - Lokasi updatedLokasi = lokasiRepository.save(lokasi); - return ResponseEntity.ok(updatedLokasi); + public LokasiResponse updateLokasi(@PathVariable Long id, + @RequestBody LokasiRequest LokasiRequest){ + LokasiRequest.setId(id); + return putUpdateLokasiService.execute(LokasiRequest); } - // delete lokasi rest api @DeleteMapping("/{id}") - public ResponseEntity> deleteLokasi(@PathVariable Long id){ - Lokasi lokasi = lokasiRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Lokasi not exist with id :" + id)); - - lokasiRepository.delete(lokasi); - Map response = new HashMap<>(); - response.put("deleted", Boolean.TRUE); - return ResponseEntity.ok(response); + public EmptyResponse deleteLokasi(@PathVariable Long id) { + return deleteLokasiService.execute(LokasiRequest.builder() + .id(id) + .build()); } - - - - } diff --git a/src/main/java/com/iconplus/smartproc/controller/MetodePengadaanController.java b/src/main/java/com/iconplus/smartproc/controller/MetodePengadaanController.java new file mode 100644 index 0000000..06bcf44 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/controller/MetodePengadaanController.java @@ -0,0 +1,77 @@ +package com.iconplus.smartproc.controller; + + +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.model.request.MetodePengadaanRequest; +import com.iconplus.smartproc.model.response.GetListMetodePengadaanResponse; +import com.iconplus.smartproc.model.response.MetodePengadaanResponse; +import com.iconplus.smartproc.service.metodepengadaan.*; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.web.bind.annotation.*; + +@CrossOrigin(origins = "${fe.server}", allowCredentials = "true") +@RestController +@RequestMapping("/api/metodepengadaan") +public class MetodePengadaanController { + + private final GetListMetodePengadaanService getListMetodePengadaanService; + private final GetMetodePengadaanByIdService getMetodePengadaanByIdService; + private final PostCreateMetodePengadaanService postCreateMetodePengadaanService; + private final PutUpdateMetodePengadaanService putUpdateMetodePengadaanService; + private final DeleteMetodePengadaanService deleteMetodePengadaanService; + + public MetodePengadaanController(GetListMetodePengadaanService getListMetodePengadaanService, + GetMetodePengadaanByIdService getMetodePengadaanByIdService, + PostCreateMetodePengadaanService postCreateMetodePengadaanService, + PutUpdateMetodePengadaanService putUpdateMetodePengadaanService, + DeleteMetodePengadaanService deleteMetodePengadaanService) { + this.getListMetodePengadaanService = getListMetodePengadaanService; + this.getMetodePengadaanByIdService = getMetodePengadaanByIdService; + this.postCreateMetodePengadaanService = postCreateMetodePengadaanService; + this.putUpdateMetodePengadaanService = putUpdateMetodePengadaanService; + this.deleteMetodePengadaanService = deleteMetodePengadaanService; + } + + + @GetMapping + public GetListMetodePengadaanResponse getListMetodePengadaan(@RequestParam(name = "search", required = false) String search, + @RequestParam(name = "page", defaultValue = "1") Integer page, + @RequestParam(name = "size", defaultValue = "5") Integer size){ + + Pageable pageable = PageRequest.of((page - 1), size); + MetodePengadaanRequest metodePengadaanRequest = MetodePengadaanRequest.builder() + .search(search) + .pageable(pageable) + .build(); + + return getListMetodePengadaanService.execute(metodePengadaanRequest); + } + + @PostMapping + public MetodePengadaanResponse createMetodePengadaan(@RequestBody MetodePengadaanRequest metodePengadaanRequest) { + return postCreateMetodePengadaanService.execute(metodePengadaanRequest); + } + + @GetMapping("/{id}") + public MetodePengadaanResponse getMetodePengadaanById(@PathVariable Long id) { + return getMetodePengadaanByIdService.execute(MetodePengadaanRequest.builder() + .id(id) + .build()); + } + + + @PutMapping("/{id}") + public MetodePengadaanResponse updateMetodepengadaan(@PathVariable Long id, + @RequestBody MetodePengadaanRequest metodePengadaanRequest){ + metodePengadaanRequest.setId(id); + return putUpdateMetodePengadaanService.execute(metodePengadaanRequest); + } + + @DeleteMapping("/{id}") + public EmptyResponse deleteMetodePengadaan(@PathVariable Long id) { + return deleteMetodePengadaanService.execute(MetodePengadaanRequest.builder() + .id(id) + .build()); + } +} diff --git a/src/main/java/com/iconplus/smartproc/controller/MetodePenyampaianController.java b/src/main/java/com/iconplus/smartproc/controller/MetodePenyampaianController.java new file mode 100644 index 0000000..3e1fe1f --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/controller/MetodePenyampaianController.java @@ -0,0 +1,82 @@ +package com.iconplus.smartproc.controller; + + +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.model.request.MetodePenyampaianRequest; +import com.iconplus.smartproc.model.response.GetListMetodePenyampaianResponse; +import com.iconplus.smartproc.model.response.MetodePenyampaianResponse; +import com.iconplus.smartproc.repository.MetodePenyampaianRepository; +import com.iconplus.smartproc.service.metodepenyampaian.*; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.web.bind.annotation.*; + +@CrossOrigin(origins = "${fe.server}", allowCredentials = "true") +@RestController +@RequestMapping("/api/metodepenyampaian") +public class MetodePenyampaianController { + + @Autowired + private MetodePenyampaianRepository metodepenyampaianRepository; + + private final GetListMetodePenyampaianService getListMetodePenyampaianService; + private final GetMetodePenyampaianByIdService getMetodePenyampaianByIdService; + private final PostCreateMetodePenyampaianService postCreateMetodePenyampaianService; + private final PutUpdateMetodePenyampaianService putUpdateMetodePenyampaianService; + private final DeleteMetodePenyampaianService deleteMetodePenyampaianService; + + public MetodePenyampaianController(GetListMetodePenyampaianService getListMetodePenyampaianService, + GetMetodePenyampaianByIdService getMetodePenyampaianByIdService, + PostCreateMetodePenyampaianService postCreateMetodePenyampaianService, + PutUpdateMetodePenyampaianService putUpdateMetodePenyampaianService, + DeleteMetodePenyampaianService deleteMetodePenyampaianService) { + this.getListMetodePenyampaianService = getListMetodePenyampaianService; + this.getMetodePenyampaianByIdService = getMetodePenyampaianByIdService; + this.postCreateMetodePenyampaianService = postCreateMetodePenyampaianService; + this.putUpdateMetodePenyampaianService = putUpdateMetodePenyampaianService; + this.deleteMetodePenyampaianService = deleteMetodePenyampaianService; + } + + + @GetMapping + public GetListMetodePenyampaianResponse getListMetodePenyampaian(@RequestParam(name = "search", required = false) String search, + @RequestParam(name = "page", defaultValue = "1") Integer page, + @RequestParam(name = "size", defaultValue = "5") Integer size){ + + Pageable pageable = PageRequest.of((page - 1), size); + MetodePenyampaianRequest metodePenyampaianRequest = MetodePenyampaianRequest.builder() + .search(search) + .pageable(pageable) + .build(); + + return getListMetodePenyampaianService.execute(metodePenyampaianRequest); + } + + @PostMapping + public MetodePenyampaianResponse createMetodePenyampaian(@RequestBody MetodePenyampaianRequest metodePenyampaianRequest) { + return postCreateMetodePenyampaianService.execute(metodePenyampaianRequest); + } + + @GetMapping("/{id}") + public MetodePenyampaianResponse getMetodePenyampaianById(@PathVariable Long id) { + return getMetodePenyampaianByIdService.execute(MetodePenyampaianRequest.builder() + .id(id) + .build()); + } + + + @PutMapping("/{id}") + public MetodePenyampaianResponse updateMetodepenyampaian(@PathVariable Long id, + @RequestBody MetodePenyampaianRequest metodePenyampaianRequest){ + metodePenyampaianRequest.setId(id); + return putUpdateMetodePenyampaianService.execute(metodePenyampaianRequest); + } + + @DeleteMapping("/{id}") + public EmptyResponse deleteMetodePenyampaian(@PathVariable Long id) { + return deleteMetodePenyampaianService.execute(MetodePenyampaianRequest.builder() + .id(id) + .build()); + } +} diff --git a/src/main/java/com/iconplus/smartproc/controller/MetodepengadaanController.java b/src/main/java/com/iconplus/smartproc/controller/MetodepengadaanController.java deleted file mode 100644 index d519be5..0000000 --- a/src/main/java/com/iconplus/smartproc/controller/MetodepengadaanController.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.iconplus.smartproc.controller; - -import com.iconplus.smartproc.entity.Metodepengadaan; -import com.iconplus.smartproc.exception.ResourceNotFoundException; -import com.iconplus.smartproc.repository.MetodepengadaanRepository; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.*; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@CrossOrigin(origins = "http://localhost:8080", allowCredentials = "true") -@RestController -@RequestMapping("/api/metodepengadaan") -public class MetodepengadaanController { - @Autowired - private MetodepengadaanRepository metodepengadaanRepository; - - //get all data - @GetMapping - public List getAllMetodepengadaans(){ - return metodepengadaanRepository.findAll(); - } - - // create - @PostMapping - public Metodepengadaan createMetodepengadaan(@RequestBody Metodepengadaan metodepengadaan) { - return metodepengadaanRepository.save(metodepengadaan); - } - - // get metodepengadaan by id rest api - @GetMapping("/{id}") - public ResponseEntity getMetodepengadaanById(@PathVariable Long id) { - Metodepengadaan metodepengadaan = metodepengadaanRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Metodepengadaan not exist with id :" + id)); - return ResponseEntity.ok(metodepengadaan); - } - - // update metodepengadaan rest api - @PutMapping("/{id}") - public ResponseEntity updateMetodepengadaan(@PathVariable Long id, @RequestBody Metodepengadaan metodepengadaanDetails){ - Metodepengadaan metodepengadaan = metodepengadaanRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Metodepengadaan not exist with id :" + id)); - - metodepengadaan.setMetodepengadaan(metodepengadaanDetails.getMetodepengadaan()); - metodepengadaan.setKeterangan(metodepengadaanDetails.getKeterangan()); - - Metodepengadaan updatedMetodepengadaan = metodepengadaanRepository.save(metodepengadaan); - return ResponseEntity.ok(updatedMetodepengadaan); - } - - // delete metodepengadaan rest api - @DeleteMapping("/{id}") - public ResponseEntity> deleteMetodepengadaan(@PathVariable Long id){ - Metodepengadaan metodepengadaan = metodepengadaanRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Metodepengadaan not exist with id :" + id)); - - metodepengadaanRepository.delete(metodepengadaan); - Map response = new HashMap<>(); - response.put("deleted", Boolean.TRUE); - return ResponseEntity.ok(response); - } -} - - - diff --git a/src/main/java/com/iconplus/smartproc/controller/MetodepenyampaianController.java b/src/main/java/com/iconplus/smartproc/controller/MetodepenyampaianController.java deleted file mode 100644 index 8d7868f..0000000 --- a/src/main/java/com/iconplus/smartproc/controller/MetodepenyampaianController.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.iconplus.smartproc.controller; - -import com.iconplus.smartproc.entity.Metodepenyampaian; -import com.iconplus.smartproc.exception.ResourceNotFoundException; -import com.iconplus.smartproc.repository.MetodepenyampaianRepository; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.*; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@CrossOrigin(origins = "http://localhost:8080", allowCredentials = "true") -@RestController -@RequestMapping("/api/metodepenyampaian") -public class MetodepenyampaianController { - @Autowired - private MetodepenyampaianRepository metodepenyampaianRepository; - - //get all data - @GetMapping - public List getAllMetodepenyampaians(){ - return metodepenyampaianRepository.findAll(); - } - - // create - @PostMapping - public Metodepenyampaian createMetodepenyampaian(@RequestBody Metodepenyampaian metodepenyampaian) { - return metodepenyampaianRepository.save(metodepenyampaian); - } - - // get metodepenyampaian by id rest api - @GetMapping("/{id}") - public ResponseEntity getMetodepenyampaianById(@PathVariable Long id) { - Metodepenyampaian metodepenyampaian = metodepenyampaianRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Metodepenyampaian not exist with id :" + id)); - return ResponseEntity.ok(metodepenyampaian); - } - - // update metodepenyampaian rest api - @PutMapping("/{id}") - public ResponseEntity updateMetodepenyampaian(@PathVariable Long id, @RequestBody Metodepenyampaian metodepenyampaianDetails){ - Metodepenyampaian metodepenyampaian = metodepenyampaianRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Metodepenyampaian not exist with id :" + id)); - - metodepenyampaian.setMetodepenyampaian(metodepenyampaianDetails.getMetodepenyampaian()); - metodepenyampaian.setKeterangan(metodepenyampaianDetails.getKeterangan()); - - Metodepenyampaian updatedMetodepenyampaian = metodepenyampaianRepository.save(metodepenyampaian); - return ResponseEntity.ok(updatedMetodepenyampaian); - } - - // delete metodepenyampaian rest api - @DeleteMapping("/{id}") - public ResponseEntity> deleteMetodepenyampaian(@PathVariable Long id){ - Metodepenyampaian metodepenyampaian = metodepenyampaianRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Metodepenyampaian not exist with id :" + id)); - - metodepenyampaianRepository.delete(metodepenyampaian); - Map response = new HashMap<>(); - response.put("deleted", Boolean.TRUE); - return ResponseEntity.ok(response); - } -} - - - diff --git a/src/main/java/com/iconplus/smartproc/controller/PermissionController.java b/src/main/java/com/iconplus/smartproc/controller/PermissionController.java new file mode 100644 index 0000000..9d7a536 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/controller/PermissionController.java @@ -0,0 +1,29 @@ +package com.iconplus.smartproc.controller; + +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.model.request.ListPermissionRequest; +import com.iconplus.smartproc.repository.PermissionRepository; +import com.iconplus.smartproc.service.permission.PutUpdatePermissionService; +import org.springframework.web.bind.annotation.*; + +@CrossOrigin(origins = "${fe.server}", allowCredentials = "true") +@RestController +@RequestMapping("/api/permission") +public class PermissionController { + + private PermissionRepository permissionRepository; + private PutUpdatePermissionService putUpdatePermissionService; + + public PermissionController(PermissionRepository permissionRepository, + PutUpdatePermissionService putUpdatePermissionService) { + this.permissionRepository = permissionRepository; + this.putUpdatePermissionService = putUpdatePermissionService; + } + + @PutMapping("/{roleId}") + public EmptyResponse editPermissionRole(@PathVariable Long roleId, @RequestBody ListPermissionRequest listPermissionRequest) { + listPermissionRequest.setRoleId(roleId); + return putUpdatePermissionService.execute(listPermissionRequest); + } + +} diff --git a/src/main/java/com/iconplus/smartproc/controller/PrintController.java b/src/main/java/com/iconplus/smartproc/controller/PrintController.java new file mode 100644 index 0000000..b99d658 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/controller/PrintController.java @@ -0,0 +1,48 @@ +package com.iconplus.smartproc.controller; + +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.model.request.PrintDrpRequest; +import com.iconplus.smartproc.model.request.RolesRequest; +import com.iconplus.smartproc.model.response.GetListPrintDrpResponse; +import com.iconplus.smartproc.model.response.PrintDrpResponse; +import com.iconplus.smartproc.service.print.DrpPrintExecutionService; +import com.iconplus.smartproc.service.print.GetListPrintDrpService; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.web.bind.annotation.*; + +@CrossOrigin(origins = "${fe.server}", allowCredentials = "true") +@RestController +@RequestMapping("/api/drp/cetak") +public class PrintController { + + private final GetListPrintDrpService getListPrintDrpService; + private final DrpPrintExecutionService drpPrintExecutionService; + + public PrintController(GetListPrintDrpService getListPrintDrpService, + DrpPrintExecutionService drpPrintExecutionService) { + this.getListPrintDrpService = getListPrintDrpService; + this.drpPrintExecutionService = drpPrintExecutionService; + + } + + @GetMapping + public GetListPrintDrpResponse getListPrintDrpResponse(@RequestParam(name = "page", defaultValue = "1") Integer page, + @RequestParam(name = "size", defaultValue = "5") Integer size) { + + Pageable pageable = PageRequest.of((page - 1), size); + PrintDrpRequest printDrpRequest = PrintDrpRequest.builder() + .pageable(pageable) + .build(); + + return getListPrintDrpService.execute(printDrpRequest); + + } + + @PostMapping("execution") + public EmptyResponse drpPrintExecution(@RequestBody PrintDrpRequest printDrpRequest) throws Exception { + return drpPrintExecutionService.execute(printDrpRequest); + } + + +} diff --git a/src/main/java/com/iconplus/smartproc/controller/RksDaftarIsiController.java b/src/main/java/com/iconplus/smartproc/controller/RksDaftarIsiController.java new file mode 100644 index 0000000..4542f74 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/controller/RksDaftarIsiController.java @@ -0,0 +1,81 @@ +package com.iconplus.smartproc.controller; + +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.model.request.RksDaftarIsiRequest; +import com.iconplus.smartproc.model.request.RksIsiRequest; +import com.iconplus.smartproc.model.response.*; +import com.iconplus.smartproc.service.rksdaftarisi.*; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.web.bind.annotation.*; + +@CrossOrigin(origins = "${fe.server}", allowCredentials = "true") +@RestController +@RequestMapping("/api/rks/daftar-isi") +public class RksDaftarIsiController { + + private final GetListRksDaftarIsiService getListRksDaftarIsiService; + private final PostCreateRksDaftarIsiService postCreateRksDaftarIsiService; + private final GetListRksIsiService getListRksIsiService; + private final DeleteRksDaftarIsiService deleteRksDaftarIsiService; + private final PutUpdateRksDaftarIsiService putUpdateRksDaftarIsiService; + public RksDaftarIsiController(GetListRksDaftarIsiService getListRksDaftarIsiService, + PostCreateRksDaftarIsiService postCreateRksDaftarIsiService, + GetListRksIsiService getListRksIsiService, + DeleteRksDaftarIsiService deleteRksDaftarIsiService, + PutUpdateRksDaftarIsiService putUpdateRksDaftarIsiService) { + this.getListRksDaftarIsiService = getListRksDaftarIsiService; + this.postCreateRksDaftarIsiService = postCreateRksDaftarIsiService; + this.getListRksIsiService = getListRksIsiService; + this.deleteRksDaftarIsiService = deleteRksDaftarIsiService; + this.putUpdateRksDaftarIsiService = putUpdateRksDaftarIsiService; + } + + + @GetMapping() + public ListRksDaftarIsiResponse getAllRksDaftarIsi(@RequestParam(name = "page", defaultValue = "1") Integer page, + @RequestParam(name = "size", defaultValue = "5") Integer size){ + + Pageable pageable = PageRequest.of((page - 1), size); + RksDaftarIsiRequest rksDaftarIsiRequest = RksDaftarIsiRequest.builder() + .pageable(pageable) + .build(); + + return getListRksDaftarIsiService.execute(rksDaftarIsiRequest); + + } + + @PostMapping() + public RksDaftarIsiResponse createRksDaftarIsi(@RequestBody RksDaftarIsiRequest rksDaftarIsiRequest) { + return postCreateRksDaftarIsiService.execute(rksDaftarIsiRequest); + } + + @GetMapping("/{id}/isi") + public ListRksIsiResponse getListRksIsi(@PathVariable(name = "id") Long id, + @RequestParam(name = "page", defaultValue = "1") Integer page, + @RequestParam(name = "size", defaultValue = "5") Integer size) { + + Pageable pageable = PageRequest.of((page - 1), size); + RksIsiRequest rksIsiRequest = RksIsiRequest.builder() + .rksDaftarIsiId(id) + .pageable(pageable) + .build(); + return getListRksIsiService.execute(rksIsiRequest); + } + + @PutMapping("/{id}") + public RksDaftarIsiResponse editRksDaftarIsi(@PathVariable(name = "id") Long id, + @RequestBody RksDaftarIsiRequest rksDaftarIsiRequest) { + rksDaftarIsiRequest.setId(id); + return putUpdateRksDaftarIsiService.execute(rksDaftarIsiRequest); + } + + @DeleteMapping("/{id}") + public EmptyResponse deleteRksDaftarIsi(@PathVariable(name = "id") Long id) { + return deleteRksDaftarIsiService.execute(RksDaftarIsiRequest.builder() + .id(id) + .build()); + + } + +} diff --git a/src/main/java/com/iconplus/smartproc/controller/RksTemplateController.java b/src/main/java/com/iconplus/smartproc/controller/RksTemplateController.java new file mode 100644 index 0000000..71973d6 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/controller/RksTemplateController.java @@ -0,0 +1,68 @@ +package com.iconplus.smartproc.controller; + +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.model.request.RksDaftarIsiRequest; +import com.iconplus.smartproc.model.request.RksTemplateRequest; +import com.iconplus.smartproc.model.response.ListRksTemplateResponse; +import com.iconplus.smartproc.model.response.RksDaftarIsiResponse; +import com.iconplus.smartproc.model.response.RksTemplateResponse; +import com.iconplus.smartproc.service.rkstemplate.DeleteRksTemplateService; +import com.iconplus.smartproc.service.rkstemplate.GetListRksTemplateService; +import com.iconplus.smartproc.service.rkstemplate.PostCreateRksTemplateService; +import com.iconplus.smartproc.service.rkstemplate.PutUpdateRksTemplateService; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.web.bind.annotation.*; + +@CrossOrigin(origins = "${fe.server}", allowCredentials = "true") +@RestController +@RequestMapping("/api/rks/template") +public class RksTemplateController { + + private final PostCreateRksTemplateService postCreateRksTemplateService; + private final GetListRksTemplateService getListRksTemplateService; + private final PutUpdateRksTemplateService putUpdateRksTemplateService; + private final DeleteRksTemplateService deleteRksTemplateService; + public RksTemplateController(PostCreateRksTemplateService postCreateRksTemplateService, + GetListRksTemplateService getListRksTemplateService, + PutUpdateRksTemplateService putUpdateRksTemplateService, + DeleteRksTemplateService deleteRksTemplateService) { + this.postCreateRksTemplateService = postCreateRksTemplateService; + this.getListRksTemplateService = getListRksTemplateService; + this.putUpdateRksTemplateService = putUpdateRksTemplateService; + this.deleteRksTemplateService = deleteRksTemplateService; + } + + @PostMapping() + public RksTemplateResponse createRksTemplate(@RequestBody RksTemplateRequest rksTemplateRequest) { + return postCreateRksTemplateService.execute(rksTemplateRequest); + } + + @GetMapping() + public ListRksTemplateResponse getListRksTemplate(@RequestParam(name = "page", defaultValue = "1") Integer page, + @RequestParam(name = "size", defaultValue = "5") Integer size) { + + Pageable pageable = PageRequest.of((page - 1), size); + RksTemplateRequest rksTemplateRequest = RksTemplateRequest.builder() + .pageable(pageable) + .build(); + + return getListRksTemplateService.execute(rksTemplateRequest); + + } + + @PutMapping("/{id}") + public RksTemplateResponse editRksTemplate(@PathVariable(name = "id") Long id, + @RequestBody RksTemplateRequest rksTemplateRequest) { + rksTemplateRequest.setId(id); + return putUpdateRksTemplateService.execute(rksTemplateRequest); + } + + @DeleteMapping("/{id}") + public EmptyResponse deleteRksTemplate(@PathVariable(name = "id") Long id) { + return deleteRksTemplateService.execute(RksTemplateRequest.builder() + .id(id) + .build()); + + } +} diff --git a/src/main/java/com/iconplus/smartproc/controller/RolesController.java b/src/main/java/com/iconplus/smartproc/controller/RolesController.java index d2b1ea6..0a4c4f5 100644 --- a/src/main/java/com/iconplus/smartproc/controller/RolesController.java +++ b/src/main/java/com/iconplus/smartproc/controller/RolesController.java @@ -1,66 +1,73 @@ package com.iconplus.smartproc.controller; -import com.iconplus.smartproc.entity.Roles; -import com.iconplus.smartproc.exception.ResourceNotFoundException; -import com.iconplus.smartproc.repository.RolesRepository; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.ResponseEntity; +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.model.request.RolesRequest; +import com.iconplus.smartproc.model.response.GetRolesResponse; +import com.iconplus.smartproc.model.response.RolesResponse; +import com.iconplus.smartproc.service.roles.*; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; import org.springframework.web.bind.annotation.*; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@CrossOrigin(origins = "http://localhost:8080", allowCredentials = "true") +@CrossOrigin(origins = "${fe.server}", allowCredentials = "true") @RestController @RequestMapping("/api/roles") public class RolesController { - @Autowired - private RolesRepository rolesRepository; - //get all data + private final GetRolesService getRolesService; + private final PostCreateRoleService postCreateRoleService; + private final GetRoleByIdService getRoleByIdService; + private final PutUpdateRoleService putUpdateRoleService; + private final DeleteRoleService deleteRoleService; + + public RolesController(GetRolesService getRolesService, + PostCreateRoleService postCreateRoleService, + GetRoleByIdService getRoleByIdService, + PutUpdateRoleService putUpdateRoleService, + DeleteRoleService deleteRoleService) { + this.getRolesService = getRolesService; + this.postCreateRoleService = postCreateRoleService; + this.getRoleByIdService = getRoleByIdService; + this.putUpdateRoleService = putUpdateRoleService; + this.deleteRoleService = deleteRoleService; + } + @GetMapping - public List getAllRoless(){ - return rolesRepository.findAll(); + public GetRolesResponse getRoles(@RequestParam(name = "search", required = false) String search, + @RequestParam(name = "page", defaultValue = "1") Integer page, + @RequestParam(name = "size", defaultValue = "5") Integer size){ + + Pageable pageable = PageRequest.of((page - 1), size); + RolesRequest rolesRequest = RolesRequest.builder() + .search(search) + .pageable(pageable) + .build(); + + return getRolesService.execute(rolesRequest); } - // create @PostMapping - public Roles createRoles(@RequestBody Roles roles) { - return rolesRepository.save(roles); + public RolesResponse createRoles(@RequestBody RolesRequest rolesRequest) { + return postCreateRoleService.execute(rolesRequest); } - // get roles by id rest api @GetMapping("/{id}") - public ResponseEntity getRolesById(@PathVariable Long id) { - Roles roles = rolesRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Roles not exist with id :" + id)); - return ResponseEntity.ok(roles); + public RolesResponse getRolesById(@PathVariable Long id) { + return getRoleByIdService.execute(RolesRequest.builder() + .id(id) + .build()); } - // update roles rest api @PutMapping("/{id}") - public ResponseEntity updateRoles(@PathVariable Long id, @RequestBody Roles rolesDetails){ - Roles roles = rolesRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Roles not exist with id :" + id)); - - roles.setRoles(rolesDetails.getRoles()); - roles.setKeterangan(rolesDetails.getKeterangan()); - roles.setIsactive(rolesDetails.getIsactive()); - - Roles updatedRoles = rolesRepository.save(roles); - return ResponseEntity.ok(updatedRoles); + public RolesResponse updateRoles(@PathVariable Long id, @RequestBody RolesRequest rolesRequest){ + rolesRequest.setId(id); + return putUpdateRoleService.execute(rolesRequest); } - // delete roles rest api @DeleteMapping("/{id}") - public ResponseEntity> deleteRoles(@PathVariable Long id){ - Roles roles = rolesRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Supposmatrix not exist with id :" + id)); - - rolesRepository.delete(roles); - Map response = new HashMap<>(); - response.put("deleted", Boolean.TRUE); - return ResponseEntity.ok(response); + public EmptyResponse deleteRoles(@PathVariable Long id){ + return deleteRoleService.execute(RolesRequest.builder() + .id(id) + .build()); } } diff --git a/src/main/java/com/iconplus/smartproc/controller/StrategiPengadaanController.java b/src/main/java/com/iconplus/smartproc/controller/StrategiPengadaanController.java new file mode 100644 index 0000000..ce0e0bf --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/controller/StrategiPengadaanController.java @@ -0,0 +1,76 @@ +package com.iconplus.smartproc.controller; + +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.model.request.StrategiPengadaanRequest; +import com.iconplus.smartproc.model.response.GetListStrategiPengadaanResponse; +import com.iconplus.smartproc.model.response.StrategiPengadaanResponse; +import com.iconplus.smartproc.service.strategipengadaan.*; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.web.bind.annotation.*; + +@CrossOrigin(origins = "${fe.server}", allowCredentials = "true") +@RestController +@RequestMapping("/api/strategipengadaan") +public class StrategiPengadaanController { + + private final DeleteStrategiPengadaanService deleteStrategiPengadaanService; + private final GetListStrategiPengadaanService getListStrategiPengadaanService; + private final GetStrategiPengadaanByIdService getStrategiPengadaanByIdService; + private final PostCreateStrategiPengadaanService postCreateStrategiPengadaanService; + private final PutUpdateStrategiPengadaanService putUpdateStrategiPengadaanService; + + public StrategiPengadaanController(DeleteStrategiPengadaanService deleteStrategiPengadaanService, + GetListStrategiPengadaanService getListStrategiPengadaanService, + GetStrategiPengadaanByIdService getStrategiPengadaanByIdService, + PostCreateStrategiPengadaanService postCreateStrategiPengadaanService, + PutUpdateStrategiPengadaanService putUpdateStrategiPengadaanService) { + this.deleteStrategiPengadaanService = deleteStrategiPengadaanService; + this.getListStrategiPengadaanService = getListStrategiPengadaanService; + this.getStrategiPengadaanByIdService = getStrategiPengadaanByIdService; + this.postCreateStrategiPengadaanService = postCreateStrategiPengadaanService; + this.putUpdateStrategiPengadaanService = putUpdateStrategiPengadaanService; + + } + + + @GetMapping + public GetListStrategiPengadaanResponse getListStrategiPengadaan(@RequestParam(name = "search", required = false) String search, + @RequestParam(name = "page", defaultValue = "1") Integer page, + @RequestParam(name = "size", defaultValue = "5") Integer size){ + + Pageable pageable = PageRequest.of((page - 1), size); + StrategiPengadaanRequest strategiPengadaanRequest = StrategiPengadaanRequest.builder() + .search(search) + .pageable(pageable) + .build(); + + return getListStrategiPengadaanService.execute(strategiPengadaanRequest); + } + + @PostMapping + public StrategiPengadaanResponse createStrategiPengadaan(@RequestBody StrategiPengadaanRequest strategiPengadaanRequest) { + return postCreateStrategiPengadaanService.execute(strategiPengadaanRequest); + } + + @GetMapping("/{id}") + public StrategiPengadaanResponse getStrategiPengadaan(@PathVariable Long id) { + return getStrategiPengadaanByIdService.execute(StrategiPengadaanRequest.builder() + .id(id) + .build()); + } + + @PutMapping("/{id}") + public StrategiPengadaanResponse updateStrategiPengadaan(@PathVariable Long id, + @RequestBody StrategiPengadaanRequest strategiPengadaanRequest){ + strategiPengadaanRequest.setId(id); + return putUpdateStrategiPengadaanService.execute(strategiPengadaanRequest); + } + + @DeleteMapping("/{id}") + public EmptyResponse deleteStrategiPengadaan(@PathVariable Long id) { + return deleteStrategiPengadaanService.execute(StrategiPengadaanRequest.builder() + .id(id) + .build()); + } +} diff --git a/src/main/java/com/iconplus/smartproc/controller/StrategipengadaanController.java b/src/main/java/com/iconplus/smartproc/controller/StrategipengadaanController.java deleted file mode 100644 index 67504bc..0000000 --- a/src/main/java/com/iconplus/smartproc/controller/StrategipengadaanController.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.iconplus.smartproc.controller; - -import com.iconplus.smartproc.entity.Strategipengadaan; -import com.iconplus.smartproc.exception.ResourceNotFoundException; -import com.iconplus.smartproc.repository.StrategipengadaanRepository; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.*; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@CrossOrigin(origins = "http://localhost:8080", allowCredentials = "true") -@RestController -@RequestMapping("/api/strategipengadaan") -public class StrategipengadaanController { - @Autowired - private StrategipengadaanRepository strategipengadaanRepository; - - //get all data - @GetMapping - public List getAllstrategipengadaans(){ - return strategipengadaanRepository.findAll(); - } - - // create - @PostMapping - public Strategipengadaan createStrategipengadaan(@RequestBody Strategipengadaan strategipengadaan) { - return strategipengadaanRepository.save(strategipengadaan); - } - - // get strategipengadaan by id rest api - @GetMapping("/{id}") - public ResponseEntity getStrategipengadaanById(@PathVariable Long id) { - Strategipengadaan strategipengadaan = strategipengadaanRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Strategipengadaan not exist with id :" + id)); - return ResponseEntity.ok(strategipengadaan); - } - - // update strategipengadaan rest api - @PutMapping("/{id}") - public ResponseEntity updateStrategipengadaan(@PathVariable Long id, @RequestBody Strategipengadaan strategipengadaanDetails){ - Strategipengadaan strategipengadaan = strategipengadaanRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Strategipengadaan not exist with id :" + id)); - - strategipengadaan.setStrategipengadaan(strategipengadaanDetails.getStrategipengadaan()); - strategipengadaan.setKeterangan(strategipengadaanDetails.getKeterangan()); - - Strategipengadaan updatedStrategipengadaan = strategipengadaanRepository.save(strategipengadaan); - return ResponseEntity.ok(updatedStrategipengadaan); - } - - // delete strategipengadaan rest api - @DeleteMapping("/{id}") - public ResponseEntity> deleteStrategipengadaan(@PathVariable Long id){ - Strategipengadaan strategipengadaan = strategipengadaanRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Strategipengadaan not exist with id :" + id)); - - strategipengadaanRepository.delete(strategipengadaan); - Map response = new HashMap<>(); - response.put("deleted", Boolean.TRUE); - return ResponseEntity.ok(response); - } - - - - -} diff --git a/src/main/java/com/iconplus/smartproc/controller/SumberDanaController.java b/src/main/java/com/iconplus/smartproc/controller/SumberDanaController.java new file mode 100644 index 0000000..0c1ccab --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/controller/SumberDanaController.java @@ -0,0 +1,73 @@ +package com.iconplus.smartproc.controller; + +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.model.request.SumberDanaRequest; +import com.iconplus.smartproc.model.response.GetListSumberDanaResponse; +import com.iconplus.smartproc.model.response.SumberDanaResponse; +import com.iconplus.smartproc.service.sumberdana.*; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.web.bind.annotation.*; + +@CrossOrigin(origins = "${fe.server}", allowCredentials = "true") +@RestController +@RequestMapping("/api/sumberdana") +public class SumberDanaController { + + private GetListSumberDanaService getListSumberDanaService; + private PostCreateSumberDanaService postCreateSumberDanaService; + private DeleteSumberDanaService deleteSumberDanaService; + private GetSumberDanaService getSumberDanaService; + private PutSumberDanaService putSumberDanaService; + + public SumberDanaController(GetListSumberDanaService getListSumberDanaService, + PostCreateSumberDanaService postCreateSumberDanaService, + DeleteSumberDanaService deleteSumberDanaService, + GetSumberDanaService getSumberDanaService, + PutSumberDanaService putSumberDanaService) { + this.getListSumberDanaService = getListSumberDanaService; + this.postCreateSumberDanaService = postCreateSumberDanaService; + this.deleteSumberDanaService = deleteSumberDanaService; + this.getSumberDanaService = getSumberDanaService; + this.putSumberDanaService = putSumberDanaService; + } + + @GetMapping + public GetListSumberDanaResponse getListSumberDana(@RequestParam(name = "search", required = false) String search, + @RequestParam(name = "page", defaultValue = "1") Integer page, + @RequestParam(name = "size", defaultValue = "5") Integer size){ + + Pageable pageable = PageRequest.of((page - 1), size); + SumberDanaRequest sumberDanaRequest = SumberDanaRequest.builder() + .search(search) + .pageable(pageable) + .build(); + + return getListSumberDanaService.execute(sumberDanaRequest); + } + + @PostMapping + public SumberDanaResponse createSumberDana(@RequestBody SumberDanaRequest request) { + return postCreateSumberDanaService.execute(request); + } + + @GetMapping("/{id}") + public SumberDanaResponse getSumberDanaById(@PathVariable Long id) { + return getSumberDanaService.execute(SumberDanaRequest.builder() + .id(id) + .build()); + } + + @PutMapping("/{id}") + public SumberDanaResponse updateBidang(@PathVariable Long id, @RequestBody SumberDanaRequest request){ + request.setId(id); + return putSumberDanaService.execute(request); + } + + @DeleteMapping("/{id}") + public EmptyResponse deleteBidang(@PathVariable Long id){ + return deleteSumberDanaService.execute(SumberDanaRequest.builder() + .id(id) + .build()); + } +} diff --git a/src/main/java/com/iconplus/smartproc/controller/SumberdanaController.java b/src/main/java/com/iconplus/smartproc/controller/SumberdanaController.java deleted file mode 100644 index ee43caf..0000000 --- a/src/main/java/com/iconplus/smartproc/controller/SumberdanaController.java +++ /dev/null @@ -1,78 +0,0 @@ -package com.iconplus.smartproc.controller; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.CrossOrigin; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import com.iconplus.smartproc.exception.ResourceNotFoundException; -import com.iconplus.smartproc.entity.Sumberdana; -import com.iconplus.smartproc.repository.SumberdanaRepository; - -@CrossOrigin(origins = "http://localhost:8080", allowCredentials = "true") -@RestController -@RequestMapping("/api/sumberdana") -public class SumberdanaController { - @Autowired - private SumberdanaRepository sumberdanaRepository; - - //get all data - @GetMapping - public List getAllSumberdanas(){ - return sumberdanaRepository.findAll(); - } - - // create - @PostMapping - public Sumberdana createSumberdana(@RequestBody Sumberdana sumberdana) { - return sumberdanaRepository.save(sumberdana); - } - - // get sumberdana by id rest api - @GetMapping("/{id}") - public ResponseEntity getSumberdanaById(@PathVariable Long id) { - Sumberdana sumberdana = sumberdanaRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Sumberdana not exist with id :" + id)); - return ResponseEntity.ok(sumberdana); - } - - // update sumberdana rest api - @PutMapping("/{id}") - public ResponseEntity updateSumberdana(@PathVariable Long id, @RequestBody Sumberdana sumberdanaDetails){ - Sumberdana sumberdana = sumberdanaRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Sumberdana not exist with id :" + id)); - - sumberdana.setSumberdana(sumberdanaDetails.getSumberdana()); - sumberdana.setKeterangan(sumberdanaDetails.getKeterangan()); - - Sumberdana updatedSumberdana = sumberdanaRepository.save(sumberdana); - return ResponseEntity.ok(updatedSumberdana); - } - - // delete sumberdana rest api - @DeleteMapping("/{id}") - public ResponseEntity> deleteSumberdana(@PathVariable Long id){ - Sumberdana sumberdana = sumberdanaRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Sumberdana not exist with id :" + id)); - - sumberdanaRepository.delete(sumberdana); - Map response = new HashMap<>(); - response.put("deleted", Boolean.TRUE); - return ResponseEntity.ok(response); - } - - - - -} diff --git a/src/main/java/com/iconplus/smartproc/controller/SupplyPositioningMatrixController.java b/src/main/java/com/iconplus/smartproc/controller/SupplyPositioningMatrixController.java new file mode 100644 index 0000000..978a6df --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/controller/SupplyPositioningMatrixController.java @@ -0,0 +1,82 @@ +package com.iconplus.smartproc.controller; + + +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.model.request.SupplyPositioningMatrixRequest; +import com.iconplus.smartproc.model.response.GetListSupplyPositioningMatrixResponse; +import com.iconplus.smartproc.model.response.SupplyPositioningMatrixResponse; +import com.iconplus.smartproc.repository.SupplyPositioningMatrixRepository; +import com.iconplus.smartproc.service.supplypositioningmatrix.*; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.web.bind.annotation.*; + +@CrossOrigin(origins = "${fe.server}", allowCredentials = "true") +@RestController +@RequestMapping("/api/supplypositioningmatrix") +public class SupplyPositioningMatrixController { + + @Autowired + private SupplyPositioningMatrixRepository supplypositioningmatrixRepository; + + private final GetListSupplyPositioningMatrixService getListSupplyPositioningMatrixService; + private final GetSupplyPositioningMatrixByIdService getSupplyPositioningMatrixByIdService; + private final PostCreateSupplyPositioningMatrixService postCreateSupplyPositioningMatrixService; + private final PutUpdateSupplyPositioningMatrixService putUpdateSupplyPositioningMatrixService; + private final DeleteSupplyPositioningMatrixService deleteSupplyPositioningMatrixService; + + public SupplyPositioningMatrixController(GetListSupplyPositioningMatrixService getListSupplyPositioningMatrixService, + GetSupplyPositioningMatrixByIdService getSupplyPositioningMatrixByIdService, + PostCreateSupplyPositioningMatrixService postCreateSupplyPositioningMatrixService, + PutUpdateSupplyPositioningMatrixService putUpdateSupplyPositioningMatrixService, + DeleteSupplyPositioningMatrixService deleteSupplyPositioningMatrixService) { + this.getListSupplyPositioningMatrixService = getListSupplyPositioningMatrixService; + this.getSupplyPositioningMatrixByIdService = getSupplyPositioningMatrixByIdService; + this.postCreateSupplyPositioningMatrixService = postCreateSupplyPositioningMatrixService; + this.putUpdateSupplyPositioningMatrixService = putUpdateSupplyPositioningMatrixService; + this.deleteSupplyPositioningMatrixService = deleteSupplyPositioningMatrixService; + } + + + @GetMapping + public GetListSupplyPositioningMatrixResponse getListSupplyPositioningMatrix(@RequestParam(name = "search", required = false) String search, + @RequestParam(name = "page", defaultValue = "1") Integer page, + @RequestParam(name = "size", defaultValue = "5") Integer size){ + + Pageable pageable = PageRequest.of((page - 1), size); + SupplyPositioningMatrixRequest supplyPositioningMatrixRequest = SupplyPositioningMatrixRequest.builder() + .search(search) + .pageable(pageable) + .build(); + + return getListSupplyPositioningMatrixService.execute(supplyPositioningMatrixRequest); + } + + @PostMapping + public SupplyPositioningMatrixResponse createSupplyPositioningMatrix(@RequestBody SupplyPositioningMatrixRequest supplyPositioningMatrixRequest) { + return postCreateSupplyPositioningMatrixService.execute(supplyPositioningMatrixRequest); + } + + @GetMapping("/{id}") + public SupplyPositioningMatrixResponse getSupplyPositioningMatrixById(@PathVariable Long id) { + return getSupplyPositioningMatrixByIdService.execute(SupplyPositioningMatrixRequest.builder() + .id(id) + .build()); + } + + + @PutMapping("/{id}") + public SupplyPositioningMatrixResponse updateSupplyPositioningmatrix(@PathVariable Long id, + @RequestBody SupplyPositioningMatrixRequest supplyPositioningMatrixRequest){ + supplyPositioningMatrixRequest.setId(id); + return putUpdateSupplyPositioningMatrixService.execute(supplyPositioningMatrixRequest); + } + + @DeleteMapping("/{id}") + public EmptyResponse deleteSupplyPositioningMatrix(@PathVariable Long id) { + return deleteSupplyPositioningMatrixService.execute(SupplyPositioningMatrixRequest.builder() + .id(id) + .build()); + } +} diff --git a/src/main/java/com/iconplus/smartproc/controller/SupplypositioningmatrixController.java b/src/main/java/com/iconplus/smartproc/controller/SupplypositioningmatrixController.java deleted file mode 100644 index abe631a..0000000 --- a/src/main/java/com/iconplus/smartproc/controller/SupplypositioningmatrixController.java +++ /dev/null @@ -1,74 +0,0 @@ -package com.iconplus.smartproc.controller; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.CrossOrigin; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import com.iconplus.smartproc.exception.ResourceNotFoundException; -import com.iconplus.smartproc.entity.Supplypositioningmatrix; -import com.iconplus.smartproc.repository.SupplypositioningmatrixRepository; - -@CrossOrigin(origins = "http://localhost:8080", allowCredentials = "true") -@RestController -@RequestMapping("/api/supplypositioningmatrix") -public class SupplypositioningmatrixController { - @Autowired - private SupplypositioningmatrixRepository supplypositioningmatrixRepository; - - //get all data - @GetMapping - public List getAllSupplypositioningmatrix(){ - return supplypositioningmatrixRepository.findAll(); - } - - // create - @PostMapping - public Supplypositioningmatrix createSupplypositioningmatrix(@RequestBody Supplypositioningmatrix supplypositioningmatrix) { - return supplypositioningmatrixRepository.save(supplypositioningmatrix); - } - - // get supplypositioningmatrix by id rest api - @GetMapping("/{id}") - public ResponseEntity getSupplypositioningmatrixById(@PathVariable Long id) { - Supplypositioningmatrix supplypositioningmatrix = supplypositioningmatrixRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Supplypositioningmatrix not exist with id :" + id)); - return ResponseEntity.ok(supplypositioningmatrix); - } - - // update jenispengadaan rest api - @PutMapping("/{id}") - public ResponseEntity updateSupplypositioningmatrix(@PathVariable Long id, @RequestBody Supplypositioningmatrix supplypositioningmatrixDetails){ - Supplypositioningmatrix supplypositioningmatrix = supplypositioningmatrixRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Supplypositioningmatrix not exist with id :" + id)); - - supplypositioningmatrix.setSupplypositioningmatrix(supplypositioningmatrixDetails.getSupplypositioningmatrix()); - supplypositioningmatrix.setKeterangan(supplypositioningmatrixDetails.getKeterangan()); - - Supplypositioningmatrix updatedSupplypositioningmatrix = supplypositioningmatrixRepository.save(supplypositioningmatrix); - return ResponseEntity.ok(updatedSupplypositioningmatrix); - } - - // delete jenispengadaan rest api - @DeleteMapping("/{id}") - public ResponseEntity> deleteSupplypositioningmatrix(@PathVariable Long id){ - Supplypositioningmatrix supplypositioningmatrix = supplypositioningmatrixRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Unit inisiator not exist with id :" + id)); - - supplypositioningmatrixRepository.delete(supplypositioningmatrix); - Map response = new HashMap<>(); - response.put("deleted", Boolean.TRUE); - return ResponseEntity.ok(response); - } -} diff --git a/src/main/java/com/iconplus/smartproc/controller/UnitInisiatorController.java b/src/main/java/com/iconplus/smartproc/controller/UnitInisiatorController.java new file mode 100644 index 0000000..3e7213c --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/controller/UnitInisiatorController.java @@ -0,0 +1,76 @@ +package com.iconplus.smartproc.controller; + +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.model.request.UnitInisiatorRequest; +import com.iconplus.smartproc.model.response.GetListUnitInisiatorResponse; +import com.iconplus.smartproc.model.response.UnitInisiatorResponse; +import com.iconplus.smartproc.service.unitinisiator.*; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.web.bind.annotation.*; + +@CrossOrigin(origins = "${fe.server}", allowCredentials = "true") +@RestController +@RequestMapping("/api/unitinisiator") +public class UnitInisiatorController { + + private final GetUnitInisiatorService getUnitInisiatorService; + private final GetListUnitInisiatorService getListUnitInisiatorService; + private final PostCreateUnitInisiatorService postCreateUnitInisiatorService; + private final DeleteUnitInisiatorService deleteUnitInisiatorService; + private final PutUpdateUnitInisiatorService putUpdateUnitInisiatorService; + + public UnitInisiatorController(GetUnitInisiatorService getUnitInisiatorService, + GetListUnitInisiatorService getListUnitInisiatorService, + PostCreateUnitInisiatorService postCreateUnitInisiatorService, + DeleteUnitInisiatorService deleteUnitInisiatorService, + PutUpdateUnitInisiatorService putUpdateUnitInisiatorService) { + this.getUnitInisiatorService = getUnitInisiatorService; + this.getListUnitInisiatorService = getListUnitInisiatorService; + this.postCreateUnitInisiatorService = postCreateUnitInisiatorService; + this.deleteUnitInisiatorService = deleteUnitInisiatorService; + this.putUpdateUnitInisiatorService = putUpdateUnitInisiatorService; + + } + + + @GetMapping + public GetListUnitInisiatorResponse getListUnitInisiator(@RequestParam(name = "search", required = false) String search, + @RequestParam(name = "page", defaultValue = "1") Integer page, + @RequestParam(name = "size", defaultValue = "5") Integer size){ + + Pageable pageable = PageRequest.of((page - 1), size); + UnitInisiatorRequest unitInisiatorRequest = UnitInisiatorRequest.builder() + .search(search) + .pageable(pageable) + .build(); + + return getListUnitInisiatorService.execute(unitInisiatorRequest); + } + + @PostMapping + public UnitInisiatorResponse createUnitInisiator(@RequestBody UnitInisiatorRequest request) { + return postCreateUnitInisiatorService.execute(request); + } + + @GetMapping("/{id}") + public UnitInisiatorResponse getUnitInisiator(@PathVariable Long id) { + return getUnitInisiatorService.execute(UnitInisiatorRequest.builder() + .id(id) + .build()); + } + + @PutMapping("/{id}") + public UnitInisiatorResponse updateUnitInisiator(@PathVariable Long id, @RequestBody UnitInisiatorRequest request){ + request.setId(id); + return putUpdateUnitInisiatorService.execute(request); + } + + @DeleteMapping("/{id}") + public EmptyResponse deleteUnitInisiator(@PathVariable Long id){ + return deleteUnitInisiatorService.execute(UnitInisiatorRequest.builder() + .id(id) + .build()); + } + +} diff --git a/src/main/java/com/iconplus/smartproc/controller/UnitinisiatorController.java b/src/main/java/com/iconplus/smartproc/controller/UnitinisiatorController.java deleted file mode 100644 index 0c6edd3..0000000 --- a/src/main/java/com/iconplus/smartproc/controller/UnitinisiatorController.java +++ /dev/null @@ -1,74 +0,0 @@ -package com.iconplus.smartproc.controller; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.CrossOrigin; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import com.iconplus.smartproc.exception.ResourceNotFoundException; -import com.iconplus.smartproc.entity.Unitinisiator; -import com.iconplus.smartproc.repository.UnitinisiatorRepository; - -@CrossOrigin(origins = "http://localhost:8080", allowCredentials = "true") -@RestController -@RequestMapping("/api/unitinisiator") -public class UnitinisiatorController { - @Autowired - private UnitinisiatorRepository unitinisiatorRepository; - - //get all data - @GetMapping - public List getAllUnitinisiator(){ - return unitinisiatorRepository.findAll(); - } - - // create - @PostMapping - public Unitinisiator createUnitinisiator(@RequestBody Unitinisiator unitinisiator) { - return unitinisiatorRepository.save(unitinisiator); - } - - // get unitinisiator by id rest api - @GetMapping("/{id}") - public ResponseEntity getUnitinisiatorById(@PathVariable Long id) { - Unitinisiator unitinisiator = unitinisiatorRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Unitinisiator not exist with id :" + id)); - return ResponseEntity.ok(unitinisiator); - } - - // update jenispengadaan rest api - @PutMapping("/{id}") - public ResponseEntity updateUnitinisiator(@PathVariable Long id, @RequestBody Unitinisiator unitinisiatorDetails){ - Unitinisiator unitinisiator = unitinisiatorRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Unitinisiator not exist with id :" + id)); - - unitinisiator.setUnitinisiator(unitinisiatorDetails.getUnitinisiator()); - unitinisiator.setKeterangan(unitinisiatorDetails.getKeterangan()); - - Unitinisiator updatedUnitinisiator = unitinisiatorRepository.save(unitinisiator); - return ResponseEntity.ok(updatedUnitinisiator); - } - - // delete jenispengadaan rest api - @DeleteMapping("/{id}") - public ResponseEntity> deleteUnitinisiator(@PathVariable Long id){ - Unitinisiator unitinisiator = unitinisiatorRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Unit inisiator not exist with id :" + id)); - - unitinisiatorRepository.delete(unitinisiator); - Map response = new HashMap<>(); - response.put("deleted", Boolean.TRUE); - return ResponseEntity.ok(response); - } -} diff --git a/src/main/java/com/iconplus/smartproc/controller/UsersController.java b/src/main/java/com/iconplus/smartproc/controller/UsersController.java index 0b35ee6..db2c09a 100644 --- a/src/main/java/com/iconplus/smartproc/controller/UsersController.java +++ b/src/main/java/com/iconplus/smartproc/controller/UsersController.java @@ -1,71 +1,85 @@ package com.iconplus.smartproc.controller; -import com.iconplus.smartproc.entity.Users; -import com.iconplus.smartproc.exception.ResourceNotFoundException; -import com.iconplus.smartproc.repository.UsersRepository; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.ResponseEntity; +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.model.request.UsersRequest; +import com.iconplus.smartproc.model.response.GetUsersResponse; +import com.iconplus.smartproc.model.response.UsersResponse; +import com.iconplus.smartproc.service.manajemenuser.*; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; import org.springframework.web.bind.annotation.*; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@CrossOrigin(origins = "http://localhost:8080", allowCredentials = "true") +@CrossOrigin(origins = "${fe.server}", allowCredentials = "true") @RestController @RequestMapping("/api/users") public class UsersController { - @Autowired - private UsersRepository usersRepository; - //get all data + private final GetListUserService getListUserService; + private final PostCreateUserService postCreateUserService; + private final PutUpdateUserService putUpdateUserService; + private final GetUserByIdService getUserByIdService; + private final DeleteUserService deleteUserService; + public UsersController(GetListUserService getListUserService, + PostCreateUserService postCreateUserService, + PutUpdateUserService putUpdateUserService, + GetUserByIdService getUserByIdService, + DeleteUserService deleteUserService) { + this.getListUserService = getListUserService; + this.postCreateUserService = postCreateUserService; + this.putUpdateUserService = putUpdateUserService; + this.getUserByIdService = getUserByIdService; + this.deleteUserService = deleteUserService; + } + + @GetMapping - public List getAllUserss(){ - return usersRepository.findAll(); + public GetUsersResponse getUsers(@RequestParam(name = "search", required = false) String search, + @RequestParam(name = "instansi", required = false) String instansi, + @RequestParam(name = "bidang", required = false) String bidang, + @RequestParam(name = "nama", required = false) String nama, + @RequestParam(name = "jabatan", required = false) String jabatan, + @RequestParam(name = "role", required = false) String role, + @RequestParam(name = "email", required = false) String email, + @RequestParam(name = "page", defaultValue = "1") Integer page, + @RequestParam(name = "size", defaultValue = "5") Integer size){ + + Pageable pageable = PageRequest.of((page - 1), size); + UsersRequest usersRequest = UsersRequest.builder() + .search(search) + .instansi(instansi) + .bidang(bidang) + .nama(nama) + .jabatan(jabatan) + .role(role) + .email(email) + .pageable(pageable) + .build(); + + return getListUserService.execute(usersRequest); } - // create @PostMapping - public Users createUsers(@RequestBody Users users) { - return usersRepository.save(users); + public UsersResponse createUsers(@RequestBody UsersRequest request) { + return postCreateUserService.execute(request); } - // get users by id rest api @GetMapping("/{id}") - public ResponseEntity getUsersById(@PathVariable Long id) { - Users users = usersRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Users not exist with id :" + id)); - return ResponseEntity.ok(users); + public UsersResponse getUsersById(@PathVariable Long id) { + return getUserByIdService.execute(UsersRequest.builder() + .id(id) + .build()); } - // update users rest api @PutMapping("/{id}") - public ResponseEntity updateUsers(@PathVariable Long id, @RequestBody Users usersDetails){ - Users users = usersRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Users not exist with id :" + id)); - - users.setUsername(usersDetails.getUsername()); - users.setNama(usersDetails.getNama()); - users.setEmail(usersDetails.getEmail()); - users.setPassword(usersDetails.getPassword()); - users.setInstansi(usersDetails.getInstansi()); - users.setBidang(usersDetails.getBidang()); - users.setJabatan(usersDetails.getJabatan()); - users.setRole(usersDetails.getRole()); - - Users updatedUsers = usersRepository.save(users); - return ResponseEntity.ok(updatedUsers); + public UsersResponse updateUsers(@PathVariable Long id, @RequestBody UsersRequest request){ + request.setId(id); + return putUpdateUserService.execute(request); } - // delete users rest api @DeleteMapping("/{id}") - public ResponseEntity> deleteUsers(@PathVariable Long id){ - Users users = usersRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Users not exist with id :" + id)); - - usersRepository.delete(users); - Map response = new HashMap<>(); - response.put("deleted", Boolean.TRUE); - return ResponseEntity.ok(response); + public EmptyResponse deleteUsers(@PathVariable Long id){ + return deleteUserService.execute(UsersRequest.builder() + .id(id) + .build()); } } \ No newline at end of file diff --git a/src/main/java/com/iconplus/smartproc/entity/Jenisanggaran.java b/src/main/java/com/iconplus/smartproc/entity/Jenisanggaran.java deleted file mode 100644 index e3f2bec..0000000 --- a/src/main/java/com/iconplus/smartproc/entity/Jenisanggaran.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.iconplus.smartproc.entity; - -import jakarta.persistence.*; - -@Entity -@Table(name = "jenisanggaran") -public class Jenisanggaran { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private long id; - private String jenisanggaran; - private String keterangan; - - public Jenisanggaran() { - } - - public Jenisanggaran(String jenisanggaran, String keterangan) { - super(); - this.jenisanggaran = jenisanggaran; - this.keterangan = keterangan; - } - public long getId() { - return id; - } - public void setId(long id) { - this.id = id; - } - public String getJenisanggaran() { - return jenisanggaran; - } - public void setJenisanggaran(String jenisanggaran) { - this.jenisanggaran = jenisanggaran; - } - public String getKeterangan() { - return keterangan; - } - public void setKeterangan(String keterangan) { - this.keterangan = keterangan; - } -} diff --git a/src/main/java/com/iconplus/smartproc/entity/Jeniskontrak.java b/src/main/java/com/iconplus/smartproc/entity/Jeniskontrak.java deleted file mode 100644 index 38e7d59..0000000 --- a/src/main/java/com/iconplus/smartproc/entity/Jeniskontrak.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.iconplus.smartproc.entity; - -import jakarta.persistence.*; - -@Entity -@Table(name = "jeniskontrak") -public class Jeniskontrak { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private long id; - - private String jeniskontrak; - private String keterangan; - - public Jeniskontrak() { - - } - - public Jeniskontrak(String jeniskontrak, String keterangan) { - super(); - this.jeniskontrak = jeniskontrak; - this.keterangan = keterangan; - } - public long getId() { - return id; - } - public void setId(long id) { - this.id = id; - } - public String getJeniskontrak() { - return jeniskontrak; - } - public void setJeniskontrak(String jeniskontrak) { - this.jeniskontrak = jeniskontrak; - } - public String getKeterangan() { - return keterangan; - } - public void setKeterangan(String keterangan) { - this.keterangan = keterangan; - } -} diff --git a/src/main/java/com/iconplus/smartproc/entity/Jenispengadaan.java b/src/main/java/com/iconplus/smartproc/entity/Jenispengadaan.java deleted file mode 100644 index 149c4fc..0000000 --- a/src/main/java/com/iconplus/smartproc/entity/Jenispengadaan.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.iconplus.smartproc.entity; - -import jakarta.persistence.*; - -@Entity -@Table(name = "jenispengadaan") -public class Jenispengadaan { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private long id; - private String jenispengadaan; - private String keterangan; - - public Jenispengadaan() { - } - - public Jenispengadaan(String jenispengadaan, String keterangan) { - super(); - this.jenispengadaan = jenispengadaan; - this.keterangan = keterangan; - } - public long getId() { - return id; - } - public void setId(long id) { - this.id = id; - } - public String getJenispengadaan() { - return jenispengadaan; - } - public void setJenispengadaan(String jenispengadaan) { - this.jenispengadaan = jenispengadaan; - } - public String getKeterangan() { - return keterangan; - } - public void setKeterangan(String keterangan) { - this.keterangan = keterangan; - } -} diff --git a/src/main/java/com/iconplus/smartproc/entity/Lokasi.java b/src/main/java/com/iconplus/smartproc/entity/Lokasi.java deleted file mode 100644 index c17f012..0000000 --- a/src/main/java/com/iconplus/smartproc/entity/Lokasi.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.iconplus.smartproc.entity; - -import jakarta.persistence.*; - -@Entity -@Table(name = "lokasi") -public class Lokasi { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private long id; - private String lokasi; - private String keterangan; - - public Lokasi() { - } - - public Lokasi(String lokasi, String keterangan) { - super(); - this.lokasi = lokasi; - this.keterangan = keterangan; - } - public long getId() { - return id; - } - public void setId(long id) { - this.id = id; - } - public String getLokasi() { - return lokasi; - } - public void setLokasi(String lokasi) { - this.lokasi = lokasi; - } - public String getKeterangan() { - return keterangan; - } - public void setKeterangan(String keterangan) { - this.keterangan = keterangan; - } -} diff --git a/src/main/java/com/iconplus/smartproc/entity/Metodepengadaan.java b/src/main/java/com/iconplus/smartproc/entity/Metodepengadaan.java deleted file mode 100644 index c3a7f21..0000000 --- a/src/main/java/com/iconplus/smartproc/entity/Metodepengadaan.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.iconplus.smartproc.entity; - -import jakarta.persistence.*; - -@Entity -@Table(name = "metodepengadaan") -public class Metodepengadaan { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private long id; - - private String metodepengadaan; - private String keterangan; - - public Metodepengadaan() { - } - - public Metodepengadaan(String metodepengadaan, String keterangan) { - super(); - this.metodepengadaan = metodepengadaan; - this.keterangan = keterangan; - } - public long getId() { - return id; - } - public void setId(long id) { - this.id = id; - } - public String getMetodepengadaan() { - return metodepengadaan; - } - public void setMetodepengadaan(String metodepengadaan) { - this.metodepengadaan = metodepengadaan; - } - public String getKeterangan() { - return keterangan; - } - public void setKeterangan(String keterangan) { - this.keterangan = keterangan; - } -} diff --git a/src/main/java/com/iconplus/smartproc/entity/Metodepenyampaian.java b/src/main/java/com/iconplus/smartproc/entity/Metodepenyampaian.java deleted file mode 100644 index f5b46d7..0000000 --- a/src/main/java/com/iconplus/smartproc/entity/Metodepenyampaian.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.iconplus.smartproc.entity; - -import jakarta.persistence.*; - -@Entity -@Table(name = "metodepenyampaian") -public class Metodepenyampaian { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private long id; - - private String metodepenyampaian; - private String keterangan; - - public Metodepenyampaian() { - } - - public Metodepenyampaian(String metodepenyampaian, String keterangan) { - super(); - this.metodepenyampaian = metodepenyampaian; - this.keterangan = keterangan; - } - public long getId() { - return id; - } - public void setId(long id) { - this.id = id; - } - public String getMetodepenyampaian() { - return metodepenyampaian; - } - public void setMetodepenyampaian(String metodepenyampaian) { - this.metodepenyampaian = metodepenyampaian; - } - public String getKeterangan() { - return keterangan; - } - public void setKeterangan(String keterangan) { - this.keterangan = keterangan; - } -} diff --git a/src/main/java/com/iconplus/smartproc/entity/Roles.java b/src/main/java/com/iconplus/smartproc/entity/Roles.java deleted file mode 100644 index dbcdb9a..0000000 --- a/src/main/java/com/iconplus/smartproc/entity/Roles.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.iconplus.smartproc.entity; - -import jakarta.persistence.*; - -@Entity -@Table(name = "roles") -public class Roles { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private long id; - private String roles; - private String keterangan; - private Boolean is_active; - - public Roles() { - } - - public Roles(String roles, String keterangan, Boolean is_active) { - super(); - this.roles = roles; - this.keterangan = keterangan; - this.is_active = is_active; - } - public long getId() { - return id; - } - public void setId(long id) { - this.id = id; - } - public String getRoles() { - return roles; - } - public void setRoles(String roles) { - this.roles = roles; - } - public String getKeterangan() { - return keterangan; - } - public void setKeterangan(String keterangan) { - this.keterangan = keterangan; - } - public Boolean getIsactive() { - return is_active; - } - public void setIsactive(Boolean is_active) { - this.is_active = is_active; - } -} diff --git a/src/main/java/com/iconplus/smartproc/entity/Strategipengadaan.java b/src/main/java/com/iconplus/smartproc/entity/Strategipengadaan.java deleted file mode 100644 index d0321c6..0000000 --- a/src/main/java/com/iconplus/smartproc/entity/Strategipengadaan.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.iconplus.smartproc.entity; - -import jakarta.persistence.*; - -@Entity -@Table(name = "strategipengadaan") -public class Strategipengadaan { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private long id; - private String strategipengadaan; - private String keterangan; - - public Strategipengadaan() { - } - - public Strategipengadaan(String strategipengadaan, String keterangan) { - super(); - this.strategipengadaan = strategipengadaan; - this.keterangan = keterangan; - } - public long getId() { - return id; - } - public void setId(long id) { - this.id = id; - } - public String getStrategipengadaan() { - return strategipengadaan; - } - public void setStrategipengadaan(String strategipengadaan) { - this.strategipengadaan = strategipengadaan; - } - public String getKeterangan() { - return keterangan; - } - public void setKeterangan(String keterangan) { - this.keterangan = keterangan; - } -} diff --git a/src/main/java/com/iconplus/smartproc/entity/Sumberdana.java b/src/main/java/com/iconplus/smartproc/entity/Sumberdana.java deleted file mode 100644 index 467c522..0000000 --- a/src/main/java/com/iconplus/smartproc/entity/Sumberdana.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.iconplus.smartproc.entity; - -import jakarta.persistence.*; - -@Entity -@Table(name = "sumberdana") -public class Sumberdana { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private long id; - private String sumberdana; - private String keterangan; - - public Sumberdana() { - } - - public Sumberdana(String sumberdana, String keterangan) { - super(); - this.sumberdana = sumberdana; - this.keterangan = keterangan; - } - public long getId() { - return id; - } - public void setId(long id) { - this.id = id; - } - public String getSumberdana() { - return sumberdana; - } - public void setSumberdana(String sumberdana) { - this.sumberdana = sumberdana; - } - public String getKeterangan() { - return keterangan; - } - public void setKeterangan(String keterangan) { - this.keterangan = keterangan; - } -} diff --git a/src/main/java/com/iconplus/smartproc/entity/Supplypositioningmatrix.java b/src/main/java/com/iconplus/smartproc/entity/Supplypositioningmatrix.java deleted file mode 100644 index ed503c5..0000000 --- a/src/main/java/com/iconplus/smartproc/entity/Supplypositioningmatrix.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.iconplus.smartproc.entity; - -import jakarta.persistence.*; - -@Entity -@Table(name = "supplypositioningmatrix") -public class Supplypositioningmatrix { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private long id; - - private String supplypositioningmatrix; - private String keterangan; - - public Supplypositioningmatrix() { - - } - - public Supplypositioningmatrix(String supplypositioningmatrix, String keterangan) { - super(); - this.supplypositioningmatrix = supplypositioningmatrix; - this.keterangan = keterangan; - } - public long getId() { - return id; - } - public void setId(long id) { - this.id = id; - } - public String getSupplypositioningmatrix() { - return supplypositioningmatrix; - } - public void setSupplypositioningmatrix(String supplypositioningmatrix) { - this.supplypositioningmatrix = supplypositioningmatrix; - } - public String getKeterangan() { - return keterangan; - } - public void setKeterangan(String keterangan) { - this.keterangan = keterangan; - } -} diff --git a/src/main/java/com/iconplus/smartproc/entity/Unitinisiator.java b/src/main/java/com/iconplus/smartproc/entity/Unitinisiator.java deleted file mode 100644 index 661882e..0000000 --- a/src/main/java/com/iconplus/smartproc/entity/Unitinisiator.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.iconplus.smartproc.entity; - -import jakarta.persistence.*; -@Entity -@Table(name = "unitinisiator") -public class Unitinisiator { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private long id; - - private String unitinisiator; - private String keterangan; - - public Unitinisiator() { - - } - - public Unitinisiator(String unitinisiator, String keterangan) { - super(); - this.unitinisiator = unitinisiator; - this.keterangan = keterangan; - } - public long getId() { - return id; - } - public void setId(long id) { - this.id = id; - } - public String getUnitinisiator() { - return unitinisiator; - } - public void setUnitinisiator(String unitinisiator) { - this.unitinisiator = unitinisiator; - } - public String getKeterangan() { - return keterangan; - } - public void setKeterangan(String keterangan) { - this.keterangan = keterangan; - } -} diff --git a/src/main/java/com/iconplus/smartproc/entity/Users.java b/src/main/java/com/iconplus/smartproc/entity/Users.java deleted file mode 100644 index 8aea9f2..0000000 --- a/src/main/java/com/iconplus/smartproc/entity/Users.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.iconplus.smartproc.entity; - -import jakarta.persistence.*; - -@Entity -@Table(name = "users") -public class Users { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private long id; - private String username; - private String nama; - private String email; - private String password; - private String instansi_id; - private String bidang_id; - private String jabatan; - private String role_id; - private Boolean is_active; - - public Users() { - } - - public Users(String username, String nama, String email, String password, String instansi_id, String bidang_id, String jabatan, String role_id, Boolean is_active) { - super(); - this.username = username; - this.nama = nama; - this.email = email; - this.password = password; - this.instansi_id = instansi_id; - this.bidang_id = bidang_id; - this.jabatan = jabatan; - this.role_id = role_id; - this.is_active = is_active; - } - public long getId() { - return id; - } - public void setId(long id) { - this.id = id; - } - public String getUsername() { - return username; - } - public void setUsername(String username) { - this.username = username; - } - public String getNama() { - return nama; - } - public void setNama(String nama) { - this.nama = nama; - } - public String getEmail() { - return email; - } - public void setEmail(String email) { - this.email = email; - } - public String getPassword() { - return password; - } - public void setPassword(String password) { - this.password = password; - } - public String getInstansi() { - return instansi_id; - } - public void setInstansi(String instansi_id) { - this.instansi_id = instansi_id; - } - public String getBidang() { - return bidang_id; - } - public void setBidang(String bidang_id) { - this.bidang_id = bidang_id; - } - public String getJabatan() { - return jabatan; - } - public void setJabatan(String jabatan) { - this.jabatan = jabatan; - } - public String getRole() { - return role_id; - } - public void setRole(String role_id) { - this.role_id = role_id; - } - public Boolean getIsactive() { - return is_active; - } - public void setIsactive(Boolean is_active) { - this.is_active = is_active; - } -} diff --git a/src/main/java/com/iconplus/smartproc/exception/BaseException.java b/src/main/java/com/iconplus/smartproc/exception/BaseException.java new file mode 100644 index 0000000..b3af918 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/exception/BaseException.java @@ -0,0 +1,49 @@ +package com.iconplus.smartproc.exception; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; +import org.springframework.http.HttpStatus; + +import java.util.Map; + +@Setter +@Getter +@ToString +public class BaseException extends RuntimeException { + + protected HttpStatus httpStatus; + protected String errorCode; + protected String errorDesc; + protected String errorMessage; + protected String rootCause; + protected Map errorMessageMap; + + + public BaseException(HttpStatus httpStatus, String errorCode, String rootCause, String errorDesc, String errorMessage) { + super(rootCause); + this.httpStatus = httpStatus; + this.errorCode = errorCode; + this.errorDesc = errorDesc; + this.errorMessage = errorMessage; + } + + public BaseException(HttpStatus httpStatus, String errorCode, String rootCause) { + super(rootCause); + this.httpStatus = httpStatus; + this.errorCode = errorCode; + } + + public BaseException(String errorCode, String rootCause) { + super(rootCause); + this.errorCode = errorCode; + } + + public BaseException(HttpStatus httpStatus, String errorCode, String rootCause, Map errorMessageMap){ + super(rootCause); + this.httpStatus = httpStatus; + this.errorCode = errorCode; + this.errorMessageMap = errorMessageMap; + } + +} diff --git a/src/main/java/com/iconplus/smartproc/exception/BusinessException.java b/src/main/java/com/iconplus/smartproc/exception/BusinessException.java new file mode 100644 index 0000000..c668dd1 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/exception/BusinessException.java @@ -0,0 +1,47 @@ +package com.iconplus.smartproc.exception; + +import org.springframework.http.HttpStatus; + +import java.util.Map; + +public class BusinessException extends BaseException { + + public BusinessException(String errorCode, String errorDesc, String errorMessage) { + super(HttpStatus.CONFLICT, errorCode, "", errorDesc, errorMessage); + } + + public BusinessException(HttpStatus httpStatus, String errorCode, String errorDesc, String errorMessage) { + super(httpStatus, errorCode, "", errorDesc, errorMessage); + } + + public BusinessException(String errorCode) { + super(HttpStatus.CONFLICT, errorCode, ""); + } + public BusinessException(HttpStatus httpStatus, String errorCode) { + super(httpStatus, errorCode, ""); + } + + public BusinessException(String errorCode, Map maps) { + super(HttpStatus.CONFLICT, errorCode, "", maps); + } + + public BusinessException(HttpStatus httpStatus, String errorCode, Map maps) { + super(httpStatus, errorCode, "", maps); + } + + public BusinessException(String errorCode, String rootCause) { + super(HttpStatus.CONFLICT, errorCode, rootCause); + } + + public BusinessException(HttpStatus httpStatus, String errorCode, String rootCause) { + super(httpStatus, errorCode, rootCause); + } + + public BusinessException(String errorCode, String rootCause, Map maps) { + super(HttpStatus.CONFLICT, errorCode, rootCause, maps); + } + + public BusinessException(HttpStatus httpStatus, String errorCode, String rootCause, Map maps) { + super(httpStatus, errorCode, rootCause, maps); + } +} diff --git a/src/main/java/com/iconplus/smartproc/exception/ErrorDetails.java b/src/main/java/com/iconplus/smartproc/exception/ErrorDetails.java deleted file mode 100644 index a4ac27c..0000000 --- a/src/main/java/com/iconplus/smartproc/exception/ErrorDetails.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.iconplus.smartproc.exception; - -import java.util.Date; - -public class ErrorDetails { - private Date timestamp; - private String message; - private String details; - - public ErrorDetails(Date timestamp, String message, String details) { - super(); - this.timestamp = timestamp; - this.message = message; - this.details = details; - } - - public Date getTimestamp() { - return timestamp; - } - - public String getMessage() { - return message; - } - - public String getDetails() { - return details; - } -} diff --git a/src/main/java/com/iconplus/smartproc/exception/ErrorHelper.java b/src/main/java/com/iconplus/smartproc/exception/ErrorHelper.java new file mode 100644 index 0000000..012e13e --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/exception/ErrorHelper.java @@ -0,0 +1,116 @@ +package com.iconplus.smartproc.exception; + +import lombok.extern.log4j.Log4j2; +import org.apache.velocity.Template; +import org.apache.velocity.VelocityContext; +import org.apache.velocity.app.Velocity; +import org.apache.velocity.app.VelocityEngine; +import org.apache.velocity.context.Context; +import org.apache.velocity.runtime.resource.loader.StringResourceLoader; +import org.apache.velocity.runtime.resource.util.StringResourceRepository; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; + +import java.io.StringWriter; +import java.util.Map; + +import static org.apache.velocity.runtime.RuntimeConstants.RESOURCE_LOADER; + +@Configuration +@Log4j2 +public class ErrorHelper { + + public static final String RAW_TEMPLATE = "rawTemplate"; + private final VelocityEngine engine; + + public ErrorHelper() { + engine = new VelocityEngine(); + this.addVelocityProperties(); + engine.init(); + } + + public ResponseEntity throwErrorException(String errorCode, HttpStatus httpStatus) { + + ErrorResponse errorResponse = new ErrorResponse(); + errorResponse.setCode(errorCode); + errorResponse.setTitle("Kesalahan terjadi"); + errorResponse.setMessage("Kesalahan terjadi"); + + return new ResponseEntity<>(errorResponse, new HttpHeaders(), httpStatus); + } + + public ResponseEntity throwErrorExceptionWithHardcodedMsg(String errorCode, HttpStatus httpStatus, + String errorDesc, String errorMsg) { + + ErrorResponse errorResponse = new ErrorResponse(); + errorResponse.setCode(errorCode); + errorResponse.setTitle(errorDesc); + errorResponse.setMessage(errorMsg); + return new ResponseEntity<>(errorResponse, new HttpHeaders(), httpStatus); + } + + public ResponseEntity throwErrorExceptionWithMetadata(String errorCode, HttpStatus httpStatus, + Map metadata) { + + ErrorResponse errorResponse = new ErrorResponse(); + errorResponse.setCode(errorCode); + errorResponse.setTitle("Kesalahan terjadi"); + errorResponse.setMessage(transform("Kesalahan terjadi", metadata)); + + return new ResponseEntity<>(errorResponse, new HttpHeaders(), httpStatus); + } + + public ResponseEntity throwErrorExceptionWithMessageAndMetadataWithoutLocalization(HttpStatus httpStatus, String errorCode, String errorTitle, String errorMessage, + Map metadata) { + + ErrorResponse errorResponse = new ErrorResponse(); + errorResponse.setCode(errorCode); + errorResponse.setTitle(errorTitle); + errorResponse.setMessage(transform(errorMessage, metadata)); + + return new ResponseEntity<>(errorResponse, new HttpHeaders(), httpStatus); + } + + private String transform(String rawNotificationTemplate, Map parameters) { + + VelocityContext context = this.getVelocityContext(rawNotificationTemplate, parameters); + Template template = engine.getTemplate(RAW_TEMPLATE); + + StringWriter templateWriter = new StringWriter(rawNotificationTemplate.length()); + template.merge(context, templateWriter); + + return templateWriter.toString(); + } + + private VelocityContext getVelocityContext(String rawNotificationTemplate, Map parameters) { + StringResourceRepository resourceRepository = (StringResourceRepository) engine + .getApplicationAttribute(StringResourceLoader.REPOSITORY_NAME_DEFAULT); + resourceRepository.putStringResource(RAW_TEMPLATE, rawNotificationTemplate); + + return new VelocityContext((Context) parameters); + } + + private void addVelocityProperties() { + Velocity.addProperty("string.resource.loader.description", "Velocity StringResource loader"); + + engine.addProperty(RESOURCE_LOADER, "string"); + engine.addProperty("string.resource.loader.repository.static", "false"); + engine.addProperty("string.resource.loader.class", + "org.apache.velocity.runtime.resource.loader.StringResourceLoader"); + engine.addProperty("string.resource.loader.repository.class", + "org.apache.velocity.runtime.resource.util.StringResourceRepositoryImpl"); + engine.setProperty("runtime.log.logsystem.class", "org.apache.velocity.runtime.log.NullLogChute"); + } + + public ResponseEntity throwErrorExceptionWithMessage(HttpStatus httpStatus, String errorCode, String errorTitle, String errorMessage) { + + ErrorResponse errorResponse = new ErrorResponse(); + errorResponse.setCode(errorCode); + errorResponse.setTitle(errorTitle); + errorResponse.setMessage(errorMessage); + + return new ResponseEntity<>(errorResponse, new HttpHeaders(), httpStatus); + } +} \ No newline at end of file diff --git a/src/main/java/com/iconplus/smartproc/exception/ErrorResponse.java b/src/main/java/com/iconplus/smartproc/exception/ErrorResponse.java new file mode 100644 index 0000000..979099e --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/exception/ErrorResponse.java @@ -0,0 +1,16 @@ +package com.iconplus.smartproc.exception; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +@NoArgsConstructor +@AllArgsConstructor +@Data +public class ErrorResponse implements Serializable { + private String code; + private String title; + private String message; +} diff --git a/src/main/java/com/iconplus/smartproc/exception/GlobalExceptionHandler.java b/src/main/java/com/iconplus/smartproc/exception/GlobalExceptionHandler.java new file mode 100644 index 0000000..2050dca --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/exception/GlobalExceptionHandler.java @@ -0,0 +1,102 @@ +package com.iconplus.smartproc.exception; + +import lombok.extern.log4j.Log4j2; +import org.apache.commons.lang3.StringUtils; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.FieldError; +import org.springframework.web.bind.MethodArgumentNotValidException; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.client.HttpServerErrorException; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.concurrent.TimeoutException; + +@Log4j2 +@ControllerAdvice +public class GlobalExceptionHandler { + + private ErrorHelper errorHelper; + + public GlobalExceptionHandler(ErrorHelper errorHelper) { + this.errorHelper = errorHelper; + } + + private Boolean isError = false; + private static final String DEFAULT_ERROR_CODE = "80000"; + + @ExceptionHandler(Exception.class) + public ResponseEntity renderDefaultResponse(Exception ex) { + log.error("Exception occurred: ", ex); + + return errorHelper.throwErrorException(DEFAULT_ERROR_CODE, HttpStatus.INTERNAL_SERVER_ERROR); + } + + @ExceptionHandler(BusinessException.class) + public ResponseEntity renderBusinessErrorResponse(BusinessException exception) { + log.error("BusinessException occurred: ", exception); + if (Objects.nonNull(exception.getErrorMessageMap())) { + return getErrorResponseResponseEntity(exception.getErrorDesc(), exception.getErrorMessage(), exception.getErrorCode(), exception.getHttpStatus(), exception.getErrorMessageMap()); + } + + return getErrorResponseResponseEntity(exception.getErrorDesc(), exception.getErrorMessage(), exception.getErrorCode(), exception.getHttpStatus(), null); + } + + + @ExceptionHandler(TechnicalException.class) + public ResponseEntity renderTechnicalErrorResponse(TechnicalException exception) { + log.error("TechnicalException occurred: ", exception); + + return getErrorResponseResponseEntity(exception.getErrorDesc(), exception.getErrorMessage(), exception.getErrorCode(), exception.getHttpStatus(), null); + } + + @ExceptionHandler(MethodArgumentNotValidException.class) + public ResponseEntity renderMethodArgumentErrorResponse(MethodArgumentNotValidException exception) { + log.error("MethodArgumentNotValidException occurred: ", exception); + + List errors = new ArrayList(); + + for (FieldError error : exception.getBindingResult().getFieldErrors()) { + errors.add(error.getField().concat(":").concat(error.getDefaultMessage())); + } + + return errorHelper.throwErrorExceptionWithMessage(HttpStatus.BAD_REQUEST, "80400", "Request Validation Error", errors.toString()); + } + + @ExceptionHandler(HttpServerErrorException.class) + public ResponseEntity renderHttpServerErrorResponse(HttpServerErrorException exception) { + log.error("HttpServerErrorException occurred: ", exception); + + return errorHelper.throwErrorException(DEFAULT_ERROR_CODE, HttpStatus.INTERNAL_SERVER_ERROR); + } + + @ExceptionHandler(TimeoutException.class) + public ResponseEntity renderTimeoutResponse(TimeoutException exception) { + log.error("TimeoutException occurred: ", exception); + + return errorHelper.throwErrorException("80001", HttpStatus.INTERNAL_SERVER_ERROR); + } + + private ResponseEntity getErrorResponseResponseEntity(String errorDesc, String errorMessage, + String errorCode, HttpStatus httpStatus, + Map metadata) { + if (StringUtils.isNotBlank(errorDesc) && StringUtils.isNotBlank(errorMessage)) { + + return errorHelper.throwErrorExceptionWithMessageAndMetadataWithoutLocalization(httpStatus, errorCode, errorDesc, errorMessage, metadata); + } else { + if (Objects.nonNull(metadata)) { + return errorHelper.throwErrorExceptionWithMetadata(errorCode, httpStatus, metadata); + } + + return errorHelper.throwErrorException(errorCode, httpStatus); + } + } + + public Boolean isError() { + return isError; + } +} \ No newline at end of file diff --git a/src/main/java/com/iconplus/smartproc/exception/ResponseExceptionResolver.java b/src/main/java/com/iconplus/smartproc/exception/ResponseExceptionResolver.java new file mode 100644 index 0000000..a0f30fd --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/exception/ResponseExceptionResolver.java @@ -0,0 +1,69 @@ +package com.iconplus.smartproc.exception; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.SneakyThrows; +import lombok.extern.log4j.Log4j2; +import org.apache.commons.lang3.ObjectUtils; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.stereotype.Component; +import org.springframework.web.servlet.ModelAndView; +import org.springframework.web.servlet.handler.AbstractHandlerExceptionResolver; +import org.springframework.web.servlet.view.json.MappingJackson2JsonView; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.Map; + +@Log4j2 +@Component +public class ResponseExceptionResolver extends AbstractHandlerExceptionResolver { + + private static final String DEFAULT_ERROR_CODE = "80000"; + + + public ResponseExceptionResolver() {} + + @SneakyThrows + @Override + protected ModelAndView doResolveException( + HttpServletRequest request, + HttpServletResponse response, + Object handler, + Exception ex + ) { + return handleException(request, response, ex); + } + + private ModelAndView handleException( + HttpServletRequest request, + HttpServletResponse response, + Exception exception + ) { + if (ObjectUtils.isNotEmpty(response) && HttpStatus.UNAUTHORIZED.value() == response.getStatus() + && ObjectUtils.isNotEmpty(exception) && exception instanceof BusinessException + ) { + BusinessException businessException = (BusinessException) exception; + ErrorResponse errorResponse = new ErrorResponse(); + errorResponse.setCode(businessException.getErrorCode()); + errorResponse.setTitle(businessException.getErrorDesc()); + errorResponse.setMessage(businessException.getErrorMessage()); + log.info("Error Response Exception : {}", errorResponse); + return new ModelAndView(new MappingJackson2JsonView(), this.getErrorResponse(errorResponse)); + } + response.setHeader("Content-Type", MediaType.APPLICATION_JSON_VALUE); + response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); + + ErrorResponse errorResponse = new ErrorResponse(); + errorResponse.setCode(DEFAULT_ERROR_CODE); + errorResponse.setTitle("Kesalahan terjadi"); + errorResponse.setMessage("Kesalahan terjadi"); + return new ModelAndView(new MappingJackson2JsonView(), this.getErrorResponse(errorResponse)); + } + + private Map getErrorResponse(ErrorResponse errorResponse) { + return new ObjectMapper().convertValue(errorResponse, new TypeReference>() { + }); + } +} diff --git a/src/main/java/com/iconplus/smartproc/exception/TechnicalException.java b/src/main/java/com/iconplus/smartproc/exception/TechnicalException.java new file mode 100644 index 0000000..386f2db --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/exception/TechnicalException.java @@ -0,0 +1,40 @@ +package com.iconplus.smartproc.exception; + +import org.springframework.http.HttpStatus; + +import java.util.Map; + +public class TechnicalException extends BaseException { + + public TechnicalException(String errorCode, String errorDesc, String errorMessage) { + super(HttpStatus.INTERNAL_SERVER_ERROR, errorCode, "", errorDesc, errorMessage); + } + + public TechnicalException(HttpStatus httpStatus, String errorCode, String errorDesc, String errorMessage){ + super(httpStatus, errorCode, "", errorDesc, errorMessage); + } + + public TechnicalException(String errorCode){ + super(HttpStatus.INTERNAL_SERVER_ERROR, errorCode, ""); + } + + public TechnicalException(HttpStatus httpStatus, String errorCode){ + super(httpStatus, errorCode, ""); + } + + public TechnicalException(String errorCode, String rootCause){ + super(HttpStatus.INTERNAL_SERVER_ERROR, errorCode, rootCause); + } + + public TechnicalException(HttpStatus httpStatus, String errorCode, String rootCause) { + super(httpStatus, errorCode, rootCause); + } + + public TechnicalException(String errorCode, String rootCause, Map maps) { + super(HttpStatus.CONFLICT, errorCode, rootCause, maps); + } + + public TechnicalException(HttpStatus httpStatus, String errorCode, String rootCause, Map maps) { + super(httpStatus, errorCode, rootCause, maps); + } +} diff --git a/src/main/java/com/iconplus/smartproc/helper/base/BaseEntity.java b/src/main/java/com/iconplus/smartproc/helper/base/BaseEntity.java new file mode 100644 index 0000000..d59a2ea --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/helper/base/BaseEntity.java @@ -0,0 +1,30 @@ +package com.iconplus.smartproc.helper.base; + +import lombok.Data; +import org.hibernate.annotations.CreationTimestamp; +import org.hibernate.annotations.UpdateTimestamp; + +import javax.persistence.Column; +import javax.persistence.MappedSuperclass; +import java.io.Serializable; +import java.sql.Timestamp; + +@Data +@MappedSuperclass +public class BaseEntity implements Serializable { + + @Column(name = "user_created", length = 50) + private String userCreated; + + @Column(name = "time_created", nullable = false, updatable=false) + @CreationTimestamp + private Timestamp timeCreated; + + @Column(name = "user_update", length = 50) + private String userUpdate; + + @Column(name = "last_update") + @UpdateTimestamp + private Timestamp lastUpdate; + +} diff --git a/src/main/java/com/iconplus/smartproc/helper/base/BaseInterfaceRequest.java b/src/main/java/com/iconplus/smartproc/helper/base/BaseInterfaceRequest.java new file mode 100644 index 0000000..cb66808 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/helper/base/BaseInterfaceRequest.java @@ -0,0 +1,10 @@ +package com.iconplus.smartproc.helper.base; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +import java.io.Serializable; + +@JsonIgnoreProperties(ignoreUnknown = true) +public interface BaseInterfaceRequest extends Serializable { + +} diff --git a/src/main/java/com/iconplus/smartproc/helper/base/BaseInterfaceResponse.java b/src/main/java/com/iconplus/smartproc/helper/base/BaseInterfaceResponse.java new file mode 100644 index 0000000..733120d --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/helper/base/BaseInterfaceResponse.java @@ -0,0 +1,12 @@ +package com.iconplus.smartproc.helper.base; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; + +import java.io.Serializable; + +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +public interface BaseInterfaceResponse extends Serializable { + +} diff --git a/src/main/java/com/iconplus/smartproc/helper/base/BasePaginationRequest.java b/src/main/java/com/iconplus/smartproc/helper/base/BasePaginationRequest.java new file mode 100644 index 0000000..79b8c46 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/helper/base/BasePaginationRequest.java @@ -0,0 +1,18 @@ +package com.iconplus.smartproc.helper.base; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@AllArgsConstructor +@NoArgsConstructor +@Data +public class BasePaginationRequest extends BaseRequest{ + + + private Integer pageSize; + private Integer pageNumber; + private String sortBy; + private String sortType; +} + diff --git a/src/main/java/com/iconplus/smartproc/helper/base/BasePaginationResponse.java b/src/main/java/com/iconplus/smartproc/helper/base/BasePaginationResponse.java new file mode 100644 index 0000000..a9bd7b5 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/helper/base/BasePaginationResponse.java @@ -0,0 +1,14 @@ +package com.iconplus.smartproc.helper.base; + +import com.iconplus.smartproc.helper.model.Pagination; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@AllArgsConstructor +@NoArgsConstructor +@Data +public class BasePaginationResponse extends BaseResponse{ + + private Pagination pagination; +} diff --git a/src/main/java/com/iconplus/smartproc/helper/base/BaseRequest.java b/src/main/java/com/iconplus/smartproc/helper/base/BaseRequest.java new file mode 100644 index 0000000..6d35ffa --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/helper/base/BaseRequest.java @@ -0,0 +1,10 @@ +package com.iconplus.smartproc.helper.base; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +import java.io.Serializable; + +@JsonIgnoreProperties(ignoreUnknown = true) +public class BaseRequest implements Serializable { + +} diff --git a/src/main/java/com/iconplus/smartproc/helper/base/BaseResponse.java b/src/main/java/com/iconplus/smartproc/helper/base/BaseResponse.java new file mode 100644 index 0000000..f552bed --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/helper/base/BaseResponse.java @@ -0,0 +1,12 @@ +package com.iconplus.smartproc.helper.base; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; + +import java.io.Serializable; + +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +public class BaseResponse implements Serializable { + +} diff --git a/src/main/java/com/iconplus/smartproc/helper/context/ApiContext.java b/src/main/java/com/iconplus/smartproc/helper/context/ApiContext.java new file mode 100644 index 0000000..aa7bd6d --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/helper/context/ApiContext.java @@ -0,0 +1,50 @@ + +package com.iconplus.smartproc.helper.context; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.http.HttpHeaders; + +import java.util.List; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class ApiContext { + + private HttpHeaders httpHeaders; + private String userRefId; + private String customerId; + private String otpMobileNo; + private String cid; + private String passportNo; + private String tokenScope; + private String deviceId; + private String boUserFullName; + private String boUserId; + private String authorization; + private String language; + private String requestId; + private String correlationId; + private String forwardedFor; + private String userAgent; + private String platform; + private String clientVersion; + private String channelId; + private String apiKey; + private String sleuthId; + private String userName; + private String userId; + private String smUniversalId; + private String clientId; + private String clientSecret; + private String secretKey; + private String timestamp; + private String mandiriKey; + private String signature; + private String clientIp; + private String releaseId; + private List stackTrace; + private String snapshot; +} diff --git a/src/main/java/com/iconplus/smartproc/helper/context/ApiContextFactory.java b/src/main/java/com/iconplus/smartproc/helper/context/ApiContextFactory.java new file mode 100644 index 0000000..1585470 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/helper/context/ApiContextFactory.java @@ -0,0 +1,183 @@ +package com.iconplus.smartproc.helper.context; + +import com.iconplus.smartproc.helper.service.TokenUtils; +import lombok.extern.log4j.Log4j2; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.util.StringUtils; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.servlet.http.HttpServletRequest; +import java.io.IOException; +import java.util.Enumeration; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Log4j2 +public class ApiContextFactory { + + private ApiContextFactory() { + } + + private static final String DEFAULT_LANGUAGE = "id-id"; + private static final String HEADER_AUTHORIZATION = "Authorization"; + private static final String HEADER_ACCEPT_LANGUAGE = HttpHeaders.ACCEPT_LANGUAGE; + private static final String HEADER_REQUEST_ID = "X-Request-ID"; + private static final String HEADER_CORRELATION_ID = "X-Correlation-ID"; + private static final String HEADER_FORWARDED_FOR = "X-Forwarded-For"; + private static final String HEADER_USER_AGENT = "User-Agent"; + private static final String HEADER_PLATFORM = "X-Platform"; + private static final String HEADER_CLIENT_VERSION = "X-Client-Version"; + private static final String HEADER_CHANNEL_ID = "X-Channel-ID"; + private static final String HEADER_API_KEY = "X-API-Key"; + private static final String HEADER_SLEUTH_ID = "X-Sleuth-ID"; + private static final String HEADER_USER_NAME = "X-User-Name"; + private static final String HEADER_USER_ID = "X-User-ID"; + private static final String HEADER_SM_UNIVERSAL_ID = "sm_universalId"; + private static final String HEADER_CUSTOMER_ID = "X-Customer-ID"; + private static final String HEADER_CLIENT_ID = "X-Client-ID"; + private static final String HEADER_CLIENT_SECRET = "X-Client-Secret"; + private static final String HEADER_SECRET_KEY = "X-Secret-Key"; + private static final String HEADER_TIMESTAMP = "X-TIMESTAMP"; + private static final String HEADER_MANDIRI_KEY = "X-MANDIRI-KEY"; + private static final String HEADER_SIGNATURE = "X-SIGNATURE"; + private static final String HEADER_RELEASE_ID = "X-Release-ID"; + + private static final String JWT_USER_ID = "user_id"; + private static final String JWT_CUSTOMER_ID = "customer_id"; + private static final String JWT_OTP_MOBILE_NO = "otpMobileNo"; + private static final String JWT_CID = "cid"; + private static final String JWT_PASSPORT_NO = "passportNo"; + private static final String JWT_LOGIN_SCOPE = "scope"; + private static final String JWT_DEVICE_ID = "device_id"; + private static final String JWT_CLIENT_ID = "clientId"; + private static final String JWT_BO_USER_FULL_NAME = "boUserFullName"; + private static final String JWT_BO_USER_ID = "boUserId"; + + private static final String X_FORWARDED_FOR = "x-forwarded-for"; + private static final String PROXY_CLIENT_IP = "proxy-client-ip"; + private static final String WL_PROXY_CLIENT_IP = "wl-proxy-client-ip"; + private static final String HTTP_CLIENT_IP = "http_client_ip"; + private static final String HTTP_X_FORWARDED_FOR = "http_x_forwarded_for"; + private static final String UNKNOWN = "unknown"; + + private static final String CLIENT_IP = "clientIp"; + + private static final List ALLOW_HEADER_LIST = List + .of(HEADER_AUTHORIZATION, HEADER_ACCEPT_LANGUAGE, HEADER_REQUEST_ID, + HEADER_CORRELATION_ID, HEADER_FORWARDED_FOR, HEADER_USER_AGENT, HEADER_PLATFORM, + HEADER_CLIENT_VERSION, HEADER_CHANNEL_ID, HEADER_API_KEY, JWT_DEVICE_ID, HEADER_SLEUTH_ID, HEADER_USER_NAME, + HEADER_USER_ID, HEADER_SM_UNIVERSAL_ID, HEADER_CUSTOMER_ID, HEADER_CLIENT_ID, HEADER_CLIENT_SECRET, HEADER_SECRET_KEY, + HEADER_TIMESTAMP, HEADER_MANDIRI_KEY, HEADER_SIGNATURE, HEADER_RELEASE_ID).stream() + .map(String::toLowerCase).collect(Collectors.toList()); + + public static ApiContext generateApiContext() throws IOException { + ApiContext apiContext = new ApiContext(); + + HttpHeaders httpHeaders = constructHttpHeaders(); + String platform = httpHeaders.getFirst(HEADER_PLATFORM); + String authentication = httpHeaders.getFirst(HEADER_AUTHORIZATION); + + if (authentication != null) { + authentication = authentication.replace("Bearer", ""); + authentication = authentication.trim(); + } + + + if (authentication != null) { + Map jwtBodyMap = TokenUtils.decodeToken(authentication); + apiContext.setUserId(jwtBodyMap.getOrDefault(JWT_USER_ID, "")); + apiContext.setCustomerId(jwtBodyMap.getOrDefault(JWT_CUSTOMER_ID, "")); + apiContext.setDeviceId(jwtBodyMap.getOrDefault(JWT_DEVICE_ID, "")); + apiContext.setTokenScope(jwtBodyMap.getOrDefault(JWT_LOGIN_SCOPE, "")); + apiContext.setClientId(jwtBodyMap.getOrDefault(JWT_CLIENT_ID, "")); + } + + if(StringUtils.isEmpty(apiContext.getClientId())) { + apiContext.setClientId(httpHeaders.getFirst(HEADER_CLIENT_ID)); + } + + apiContext.setHttpHeaders(httpHeaders); + apiContext.setAuthorization(authentication); + apiContext.setLanguage(httpHeaders.getFirst(HEADER_ACCEPT_LANGUAGE)); + apiContext.setRequestId(httpHeaders.getFirst(HEADER_REQUEST_ID)); + apiContext.setCorrelationId(httpHeaders.getFirst(HEADER_CORRELATION_ID)); + apiContext.setForwardedFor(httpHeaders.getFirst(HEADER_FORWARDED_FOR)); + apiContext.setUserAgent(httpHeaders.getFirst(HEADER_USER_AGENT)); + apiContext.setPlatform(httpHeaders.getFirst(HEADER_PLATFORM)); + apiContext.setClientVersion(httpHeaders.getFirst(HEADER_CLIENT_VERSION)); + apiContext.setChannelId(httpHeaders.getFirst(HEADER_CHANNEL_ID)); + apiContext.setSleuthId(httpHeaders.getFirst(HEADER_SLEUTH_ID)); + apiContext.setApiKey(httpHeaders.getFirst(HEADER_API_KEY)); + apiContext.setClientSecret(httpHeaders.getFirst(HEADER_CLIENT_SECRET)); + apiContext.setSecretKey(httpHeaders.getFirst(HEADER_SECRET_KEY)); + apiContext.setTimestamp(httpHeaders.getFirst(HEADER_TIMESTAMP)); + apiContext.setMandiriKey(httpHeaders.getFirst(HEADER_MANDIRI_KEY)); + apiContext.setSignature(httpHeaders.getFirst(HEADER_SIGNATURE)); + apiContext.setClientIp(httpHeaders.getFirst(CLIENT_IP)); + apiContext.setReleaseId(httpHeaders.getFirst(HEADER_RELEASE_ID)); + + //fill the username with user id if its empty, because AD changed the design and they remove the x-user-name + String userName = httpHeaders.getFirst(HEADER_USER_NAME); + if (userName == null || userName.equals("")) { + userName = httpHeaders.getFirst(HEADER_USER_ID); + } + apiContext.setUserName(userName); + + return apiContext; + } + + public static HttpHeaders constructHttpHeaders() throws IOException { + HttpHeaders httpHeaders = new HttpHeaders(); + httpHeaders.setContentType(MediaType.APPLICATION_JSON); + HttpServletRequest curRequest = ((ServletRequestAttributes) RequestContextHolder + .currentRequestAttributes()).getRequest(); + Enumeration headerNames = curRequest.getHeaderNames(); + + if (headerNames != null) { + while (headerNames.hasMoreElements()) { + String header = headerNames.nextElement(); + String value = curRequest.getHeader(header); + if (ALLOW_HEADER_LIST.contains(header)) { + log.debug("Adding header {} with value {}", header, value); + httpHeaders.add(header, value); + } else { + log.debug("Header {} with value {} is not required to be copied", header, + value); + } + } + } + + if (!httpHeaders.containsKey(HEADER_ACCEPT_LANGUAGE) || StringUtils + .isEmpty(httpHeaders.getFirst( + HEADER_ACCEPT_LANGUAGE))) { + httpHeaders.set(HEADER_ACCEPT_LANGUAGE, DEFAULT_LANGUAGE); + } + + httpHeaders.add(CLIENT_IP, getClientIp(httpHeaders, curRequest.getRemoteAddr())); + + return httpHeaders; + } + + public static String getClientIp(HttpHeaders httpHeaders, String remoteAddr) { + String ip = httpHeaders.getFirst(X_FORWARDED_FOR); + if (ip == null || ip.length() == 0 || UNKNOWN.equalsIgnoreCase(ip)) { + ip = httpHeaders.getFirst(PROXY_CLIENT_IP); + } + if (ip == null || ip.length() == 0 || UNKNOWN.equalsIgnoreCase(ip)) { + ip = httpHeaders.getFirst(WL_PROXY_CLIENT_IP); + } + if (ip == null || ip.length() == 0 || UNKNOWN.equalsIgnoreCase(ip)) { + ip = httpHeaders.getFirst(HTTP_CLIENT_IP); + } + if (ip == null || ip.length() == 0 || UNKNOWN.equalsIgnoreCase(ip)) { + ip = httpHeaders.getFirst(HTTP_X_FORWARDED_FOR); + } + if (ip == null || ip.length() == 0 || UNKNOWN.equalsIgnoreCase(ip)) { + ip = remoteAddr; + } + return ip; + } +} diff --git a/src/main/java/com/iconplus/smartproc/helper/context/AutoConfiguration.java b/src/main/java/com/iconplus/smartproc/helper/context/AutoConfiguration.java new file mode 100644 index 0000000..e91c5af --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/helper/context/AutoConfiguration.java @@ -0,0 +1,21 @@ +package com.iconplus.smartproc.helper.context; + +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.context.annotation.RequestScope; + +import java.io.IOException; + +@Configuration +public class AutoConfiguration { + + @RequestScope + @Bean + @ConditionalOnMissingBean(ApiContext.class) + public ApiContext apiContext() throws IOException { + return ApiContextFactory.generateApiContext(); + } + + +} diff --git a/src/main/java/com/iconplus/smartproc/helper/context/ContextProvider.java b/src/main/java/com/iconplus/smartproc/helper/context/ContextProvider.java new file mode 100644 index 0000000..599c9fc --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/helper/context/ContextProvider.java @@ -0,0 +1,30 @@ +package com.iconplus.smartproc.helper.context; + +import org.springframework.beans.BeansException; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; + +public class ContextProvider implements ApplicationContextAware { + + private static ApplicationContext CONTEXT; + + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + CONTEXT = applicationContext; + } + + /** + * Get a Spring bean by type. + **/ + public static T getBean(Class beanClass) { + return CONTEXT.getBean(beanClass); + } + + /** + * Get a Spring bean by name. + **/ + public static Object getBean(String beanName) { + return CONTEXT.getBean(beanName); + } + +} \ No newline at end of file diff --git a/src/main/java/com/iconplus/smartproc/helper/context/HttpHeadersInterceptor.java b/src/main/java/com/iconplus/smartproc/helper/context/HttpHeadersInterceptor.java new file mode 100644 index 0000000..9cdc799 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/helper/context/HttpHeadersInterceptor.java @@ -0,0 +1,33 @@ +package com.iconplus.smartproc.helper.context; + +import lombok.extern.log4j.Log4j2; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpRequest; +import org.springframework.http.client.ClientHttpRequestExecution; +import org.springframework.http.client.ClientHttpRequestInterceptor; +import org.springframework.http.client.ClientHttpResponse; +import org.springframework.stereotype.Component; + +import java.io.IOException; + +@Log4j2 +@Component +public class HttpHeadersInterceptor implements ClientHttpRequestInterceptor { + + @Autowired + private ApiContext apiContext; + + public HttpHeadersInterceptor(ApiContext apiContext) { + this.apiContext = apiContext; + } + + @Override + public ClientHttpResponse intercept(HttpRequest request, byte[] body, + ClientHttpRequestExecution execution) throws IOException { + apiContext.getHttpHeaders().entrySet().stream() + .filter(x -> x.getKey() != null) + .forEach(x -> request.getHeaders().add(x.getKey(), x.getValue().get(0))); + return execution.execute(request, body); + } + +} diff --git a/src/main/java/com/iconplus/smartproc/helper/model/EmptyRequest.java b/src/main/java/com/iconplus/smartproc/helper/model/EmptyRequest.java new file mode 100644 index 0000000..c9048cb --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/helper/model/EmptyRequest.java @@ -0,0 +1,7 @@ +package com.iconplus.smartproc.helper.model; + +import com.iconplus.smartproc.helper.base.BaseRequest; + +public class EmptyRequest extends BaseRequest { + +} diff --git a/src/main/java/com/iconplus/smartproc/helper/model/EmptyResponse.java b/src/main/java/com/iconplus/smartproc/helper/model/EmptyResponse.java new file mode 100644 index 0000000..d33ba27 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/helper/model/EmptyResponse.java @@ -0,0 +1,9 @@ +package com.iconplus.smartproc.helper.model; + +import brave.internal.Nullable; +import com.iconplus.smartproc.helper.base.BaseResponse; + +@Nullable +public class EmptyResponse extends BaseResponse { + +} diff --git a/src/main/java/com/iconplus/smartproc/helper/model/Pagination.java b/src/main/java/com/iconplus/smartproc/helper/model/Pagination.java new file mode 100644 index 0000000..879b5e2 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/helper/model/Pagination.java @@ -0,0 +1,22 @@ +package com.iconplus.smartproc.helper.model; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class Pagination implements Serializable { + private Integer pageSize; + private Integer currentPage; + private Integer totalPages; + private Long totalRecords; + private Boolean isFirstPage; + private Boolean isLastPage; +} + diff --git a/src/main/java/com/iconplus/smartproc/helper/service/BaseInterfaceService.java b/src/main/java/com/iconplus/smartproc/helper/service/BaseInterfaceService.java new file mode 100644 index 0000000..1d02476 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/helper/service/BaseInterfaceService.java @@ -0,0 +1,8 @@ +package com.iconplus.smartproc.helper.service; + +import com.iconplus.smartproc.helper.base.BaseInterfaceRequest; +import com.iconplus.smartproc.helper.base.BaseInterfaceResponse; + +public interface BaseInterfaceService { + V execute(T input); +} diff --git a/src/main/java/com/iconplus/smartproc/helper/service/BasePaginationService.java b/src/main/java/com/iconplus/smartproc/helper/service/BasePaginationService.java new file mode 100644 index 0000000..27ca323 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/helper/service/BasePaginationService.java @@ -0,0 +1,30 @@ +package com.iconplus.smartproc.helper.service; + +import com.iconplus.smartproc.helper.base.BasePaginationRequest; +import com.iconplus.smartproc.helper.base.BasePaginationResponse; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.beans.factory.annotation.Value; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public abstract class BasePaginationService implements BaseService{ + + @Value("${default.page.size}") + private Integer pageSize; + + @Value("${default.page.number}") + private Integer pageNumber; + + @Value("${default.page.sortBy}") + private String sortBy; + + @Value("${default.page.sortType}") + private String sortType; + + @Value("${default.page.maxPageSize}") + private Integer maxPageSize; + +} diff --git a/src/main/java/com/iconplus/smartproc/helper/service/BaseService.java b/src/main/java/com/iconplus/smartproc/helper/service/BaseService.java new file mode 100644 index 0000000..3dc774b --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/helper/service/BaseService.java @@ -0,0 +1,12 @@ +package com.iconplus.smartproc.helper.service; + + +import com.iconplus.smartproc.helper.base.BaseRequest; +import com.iconplus.smartproc.helper.base.BaseResponse; + +import java.io.FileNotFoundException; +import java.io.IOException; + +public interface BaseService { + V execute(T input) throws Exception; +} diff --git a/src/main/java/com/iconplus/smartproc/helper/service/TokenUtils.java b/src/main/java/com/iconplus/smartproc/helper/service/TokenUtils.java new file mode 100644 index 0000000..4256cb4 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/helper/service/TokenUtils.java @@ -0,0 +1,53 @@ +package com.iconplus.smartproc.helper.service; + +import com.nimbusds.jose.JWSObject; +import com.nimbusds.jose.Payload; +import lombok.extern.log4j.Log4j2; +import net.minidev.json.JSONObject; +import org.apache.commons.lang3.StringUtils; + +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; + +@Log4j2 +public class TokenUtils { + + private TokenUtils() { + + } + + public static Map decodeToken(String jwtToken) { + Map body = new HashMap<>(); + + try { + if (jwtToken != null) { + jwtToken = jwtToken.replace("Bearer", ""); + jwtToken = jwtToken.trim(); + } + if (StringUtils.isBlank(jwtToken)) { + return body; + } + JWSObject token = JWSObject.parse(jwtToken); + + Payload tokenPayload = token.getPayload(); + JSONObject tokenBody = tokenPayload.toJSONObject(); + + tokenBody.forEach((key, value) -> { + if (Objects.isNull(value)) { + value = ""; + } + + body.put(key, value.toString()); + }); + } catch (Exception e) { + log.error("Failed to parse JWT Token. Error: {}", e.getMessage()); + } + + return body; + } + + public static Object getValueByParam(String param, String token) { + return decodeToken(token).get(param); + } +} \ No newline at end of file diff --git a/src/main/java/com/iconplus/smartproc/model/entity/Bidang.java b/src/main/java/com/iconplus/smartproc/model/entity/Bidang.java new file mode 100644 index 0000000..b644d2f --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/entity/Bidang.java @@ -0,0 +1,41 @@ +package com.iconplus.smartproc.model.entity; + +import com.iconplus.smartproc.helper.base.BaseEntity; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.Type; + +import javax.persistence.*; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Entity +@Table(name = "bidang") +public class Bidang extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Long id; + + @Column(name = "instansi_id") + private Long instansiId; + + @Column(name = "bidang") + private String bidang; + + @Column(name = "keterangan") + private String keterangan; + + @Column(name = "is_active") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean isActive; + + @Column(name = "is_delete") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean isDelete; +} diff --git a/src/main/java/com/iconplus/smartproc/model/entity/Drp.java b/src/main/java/com/iconplus/smartproc/model/entity/Drp.java new file mode 100644 index 0000000..d4472c1 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/entity/Drp.java @@ -0,0 +1,58 @@ +package com.iconplus.smartproc.model.entity; + +import com.iconplus.smartproc.helper.base.BaseEntity; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.Type; + +import javax.persistence.*; +import java.sql.Date; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Entity +@Table(name = "drp") +public class Drp extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Long id; + + @Column(name = "tahun") + private Integer tahun; + + @Column(name = "approve_status") + private String approveStatus; + + @Column(name = "approve_date") + private Date approveDate; + + @Column(name = "vp_approve_date") + private Date vpApproveDate; + + @Column(name = "komite_approve_date") + private Date komiteApproveDate; + + @Column(name = "direktur_approve_date") + private Date direkturApproveDate; + + @Column(name = "is_print") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean isPrint; + + @Column(name = "print_date") + private Date printDate; + + @Column(name = "is_active") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean isActive; + + @Column(name = "is_delete") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean isDelete; +} diff --git a/src/main/java/com/iconplus/smartproc/model/entity/DrpApproval.java b/src/main/java/com/iconplus/smartproc/model/entity/DrpApproval.java new file mode 100644 index 0000000..04d50b7 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/entity/DrpApproval.java @@ -0,0 +1,49 @@ +package com.iconplus.smartproc.model.entity; + +import com.iconplus.smartproc.helper.base.BaseEntity; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.Type; + +import javax.persistence.*; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Entity +@Table(name = "drp_approval") +public class DrpApproval extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Long id; + + @Column(name = "drp_id") + private Long drpId; + + @Column(name = "approver_user_id") + private Long approverUserId; + + @Column(name = "is_approve") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean isApprove; + + @Column(name = "level") + private String level; + + @Column(name = "catatan") + private String catatan; + + @Column(name = "is_active") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean isActive; + + @Column(name = "is_delete") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean isDelete; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/entity/DrpApprovalHistory.java b/src/main/java/com/iconplus/smartproc/model/entity/DrpApprovalHistory.java new file mode 100644 index 0000000..306a41d --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/entity/DrpApprovalHistory.java @@ -0,0 +1,43 @@ +package com.iconplus.smartproc.model.entity; + +import com.iconplus.smartproc.helper.base.BaseEntity; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.Type; + +import javax.persistence.*; +import java.sql.Date; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Entity +@Table(name = "drp_approval_history") +public class DrpApprovalHistory extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Long id; + + @Column(name = "drp_approval_id") + private Long drpApprovalId; + + @Column(name = "date") + private Date date; + + @Column(name = "status") + private String status; + + @Column(name = "is_active") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean isActive; + + @Column(name = "is_delete") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean isDelete; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/entity/DrpDokumen.java b/src/main/java/com/iconplus/smartproc/model/entity/DrpDokumen.java new file mode 100644 index 0000000..430ed7d --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/entity/DrpDokumen.java @@ -0,0 +1,44 @@ +package com.iconplus.smartproc.model.entity; + +import com.iconplus.smartproc.helper.base.BaseEntity; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.Type; + +import javax.persistence.*; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Entity +@Table(name = "drp_dokumen") +public class DrpDokumen extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Long id; + + @Column(name = "drp_id") + private Long drpId; + + @Column(name = "jenis_dokumen_id") + private Long jenisDokumenId; + + @Column(name = "filename") + private String filename; + + @Column(name = "keterangan") + private String keterangan; + + @Column(name = "is_active") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean isActive; + + @Column(name = "is_delete") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean isDelete; +} diff --git a/src/main/java/com/iconplus/smartproc/model/entity/DrpPengadaan.java b/src/main/java/com/iconplus/smartproc/model/entity/DrpPengadaan.java new file mode 100644 index 0000000..9f5808b --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/entity/DrpPengadaan.java @@ -0,0 +1,83 @@ +package com.iconplus.smartproc.model.entity; + +import com.iconplus.smartproc.helper.base.BaseEntity; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.Type; + +import javax.persistence.*; +import java.math.BigDecimal; +import java.sql.Date; +import java.sql.Timestamp; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Entity +@Table(name = "drp_pengadaan") +public class DrpPengadaan extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(name = "drp_id") + private Long drpId; + + @Column(name = "nomor") + private String nomor; + + @Column(name = "nama_pengadaan") + private String namaPengadaan; + + @Column(name = "lokasi_id") + private Long lokasiId; + + @Column(name = "jenis_pengadaan_id") + private Long jenisPengadaanId; + + @Column(name = "unit_inisiator_id") + private Long unitInisiatorId; + + @Column(name = "pagu") + private BigDecimal pagu; + + @Column(name = "sumber_dana_id") + private Long sumberDanaId; + + @Column(name = "supply_positioning_matrix_id") + private Long supplyPositioningMatrixId; + + @Column(name = "metode_pengadaan_id") + private Long metodePengadaanId; + + @Column(name = "metode_penyampaian_id") + private Long metodePenyampaianId; + + @Column(name = "jenis_kontrak_id") + private Long jenisKontrakId; + + @Column(name = "strategi_pengadaan_id") + private Long strategiPengadaanId; + + @Column(name = "rencana_tanggal") + private Date rencanaTanggal; + + @Column(name = "target_tanggal") + private Date targetTanggal; + + @Column(name = "hpe") + private BigDecimal hpe; + + @Column(name = "is_active") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean isActive; + + @Column(name = "is_delete") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean isDelete; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/entity/DrpPengadaanDokumen.java b/src/main/java/com/iconplus/smartproc/model/entity/DrpPengadaanDokumen.java new file mode 100644 index 0000000..fad33d7 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/entity/DrpPengadaanDokumen.java @@ -0,0 +1,48 @@ +package com.iconplus.smartproc.model.entity; + +import com.iconplus.smartproc.helper.base.BaseEntity; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.Type; + +import javax.persistence.*; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Entity +@Table(name = "drp_pengadaan_dokumen") +public class DrpPengadaanDokumen extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Long id; + + @Column(name = "drp_pengadaan_id") + private Long drpPengadaanId; + + @Column(name = "drp_id") + private Long drpId; + + @Column(name = "jenis_dokumen_id") + private Long jenisDokumenId; + + @Column(name = "filename") + private String filename; + + @Column(name = "keterangan") + private String keterangan; + + @Column(name = "is_active") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean isActive; + + @Column(name = "is_delete") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean isDelete; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/entity/DrpRekomendasi.java b/src/main/java/com/iconplus/smartproc/model/entity/DrpRekomendasi.java new file mode 100644 index 0000000..e0f6eda --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/entity/DrpRekomendasi.java @@ -0,0 +1,51 @@ +package com.iconplus.smartproc.model.entity; + +import com.iconplus.smartproc.helper.base.BaseEntity; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.Type; + +import javax.persistence.*; +import java.sql.Date; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Entity +@Table(name = "drp_rekomendasi") +public class DrpRekomendasi extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Long id; + + @Column(name = "drp_id") + private Long drpId; + + @Column(name = "user_id") + private Long userId; + + @Column(name = "jenis_pengadaan_id") + private Long jenisPengadaanId; + + @Column(name = "drp_approval_id") + private Long drpApprovalId; + + @Column(name = "rekomendasi") + private String rekomendasi; + + @Column(name = "rekomendasi_date") + private Date rekomendasiDate; + + @Column(name = "is_active") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean isActive; + + @Column(name = "is_delete") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean isDelete; +} diff --git a/src/main/java/com/iconplus/smartproc/model/entity/Instansi.java b/src/main/java/com/iconplus/smartproc/model/entity/Instansi.java new file mode 100644 index 0000000..ca5a949 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/entity/Instansi.java @@ -0,0 +1,41 @@ +package com.iconplus.smartproc.model.entity; + +import com.iconplus.smartproc.helper.base.BaseEntity; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.Type; + +import javax.persistence.*; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Entity +@Table(name = "instansi") +public class Instansi extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Long id; + + @Column(name = "instansi") + private String instansi; + + @Column(name = "alamat") + private String alamat; + + @Column(name = "keterangan") + private String keterangan; + + @Column(name = "is_active") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean isActive; + + @Column(name = "is_delete") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean isDelete; +} diff --git a/src/main/java/com/iconplus/smartproc/model/entity/Jabatan.java b/src/main/java/com/iconplus/smartproc/model/entity/Jabatan.java new file mode 100644 index 0000000..80b5543 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/entity/Jabatan.java @@ -0,0 +1,44 @@ +package com.iconplus.smartproc.model.entity; + +import com.iconplus.smartproc.helper.base.BaseEntity; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.Type; + +import javax.persistence.*; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Entity +@Table(name = "jabatan") +public class Jabatan extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Long id; + + @Column(name = "jabatan") + private String jabatan; + + @Column(name = "instansi_id") + private Long instansiId; + + @Column(name = "bidang_id") + private Long bidangId; + + @Column(name = "keterangan") + private String keterangan; + + @Column(name = "is_active") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean isActive; + + @Column(name = "is_delete") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean isDelete; +} diff --git a/src/main/java/com/iconplus/smartproc/model/entity/JenisAnggaran.java b/src/main/java/com/iconplus/smartproc/model/entity/JenisAnggaran.java new file mode 100644 index 0000000..7ea948b --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/entity/JenisAnggaran.java @@ -0,0 +1,38 @@ +package com.iconplus.smartproc.model.entity; + +import com.iconplus.smartproc.helper.base.BaseEntity; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.Type; + +import javax.persistence.*; + +@Entity +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Table(name = "jenis_anggaran") +public class JenisAnggaran extends BaseEntity { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Long id; + + @Column(name = "jenis_anggaran") + private String jenisAnggaran; + + @Column(name = "keterangan") + private String keterangan; + + @Column(name = "is_active") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean isActive; + + @Column(name = "is_delete") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean isDelete; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/entity/JenisKontrak.java b/src/main/java/com/iconplus/smartproc/model/entity/JenisKontrak.java new file mode 100644 index 0000000..a84127b --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/entity/JenisKontrak.java @@ -0,0 +1,38 @@ +package com.iconplus.smartproc.model.entity; + +import com.iconplus.smartproc.helper.base.BaseEntity; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.Type; + +import javax.persistence.*; + +@Entity +@Table(name = "jenis_kontrak") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class JenisKontrak extends BaseEntity { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Long id; + + @Column(name = "jenis_kontrak") + private String jenisKontrak; + + @Column(name = "keterangan") + private String keterangan; + + @Column(name = "is_active") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean isActive; + + @Column(name = "is_delete") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean isDelete; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/entity/JenisPengadaan.java b/src/main/java/com/iconplus/smartproc/model/entity/JenisPengadaan.java new file mode 100644 index 0000000..6881919 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/entity/JenisPengadaan.java @@ -0,0 +1,38 @@ +package com.iconplus.smartproc.model.entity; + +import com.iconplus.smartproc.helper.base.BaseEntity; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.Type; + +import javax.persistence.*; + +@Entity +@Table(name = "jenis_pengadaan") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class JenisPengadaan extends BaseEntity { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private long id; + + @Column(name = "jenis_pengadaan") + private String jenisPengadaan; + + @Column(name = "keterangan") + private String keterangan; + + @Column(name = "is_active") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean isActive; + + @Column(name = "is_delete") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean isDelete; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/entity/Lokasi.java b/src/main/java/com/iconplus/smartproc/model/entity/Lokasi.java new file mode 100644 index 0000000..8c479df --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/entity/Lokasi.java @@ -0,0 +1,38 @@ +package com.iconplus.smartproc.model.entity; + +import com.iconplus.smartproc.helper.base.BaseEntity; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.Type; + +import javax.persistence.*; + +@Entity +@Table(name = "lokasi") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class Lokasi extends BaseEntity { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Long id; + + @Column(name = "lokasi") + private String lokasi; + + @Column(name = "keterangan") + private String keterangan; + + @Column(name = "is_active") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean isActive; + + @Column(name = "is_delete") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean isDelete; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/entity/Menus.java b/src/main/java/com/iconplus/smartproc/model/entity/Menus.java new file mode 100644 index 0000000..5ae714b --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/entity/Menus.java @@ -0,0 +1,44 @@ +package com.iconplus.smartproc.model.entity; + +import com.iconplus.smartproc.helper.base.BaseEntity; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.Type; + +import javax.persistence.*; + + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Entity +@Table(name = "menus") +public class Menus extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Long id; + + @Column(name = "parent_id") + private Long parentId; + + @Column(name = "nama") + private String nama; + + @Column(name = "link") + private String link; + + @Column(name = "urutan") + private Long urutan; + + @Column(name = "icon") + private String icon; + + @Column(name = "is_delete") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean isDelete; +} diff --git a/src/main/java/com/iconplus/smartproc/model/entity/MetodePengadaan.java b/src/main/java/com/iconplus/smartproc/model/entity/MetodePengadaan.java new file mode 100644 index 0000000..ad83b9f --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/entity/MetodePengadaan.java @@ -0,0 +1,38 @@ +package com.iconplus.smartproc.model.entity; + +import com.iconplus.smartproc.helper.base.BaseEntity; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.Type; + +import javax.persistence.*; + +@Entity +@Table(name = "metode_pengadaan") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class MetodePengadaan extends BaseEntity { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private long id; + + @Column(name = "metode_pengadaan") + private String metodePengadaan; + + @Column(name = "keterangan") + private String keterangan; + + @Column(name = "is_active") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean isActive; + + @Column(name = "is_delete") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean isDelete; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/entity/MetodePenyampaian.java b/src/main/java/com/iconplus/smartproc/model/entity/MetodePenyampaian.java new file mode 100644 index 0000000..23093cf --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/entity/MetodePenyampaian.java @@ -0,0 +1,39 @@ +package com.iconplus.smartproc.model.entity; + + +import com.iconplus.smartproc.helper.base.BaseEntity; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.Type; + +import javax.persistence.*; + +@Entity +@Table(name = "metode_penyampaian") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class MetodePenyampaian extends BaseEntity { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private long id; + + @Column(name = "metode_penyampaian") + private String metodePenyampaian; + + @Column(name = "keterangan") + private String keterangan; + + @Column(name = "is_active") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean isActive; + + @Column(name = "is_delete") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean isDelete; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/entity/Permission.java b/src/main/java/com/iconplus/smartproc/model/entity/Permission.java new file mode 100644 index 0000000..60612d8 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/entity/Permission.java @@ -0,0 +1,54 @@ +package com.iconplus.smartproc.model.entity; + +import com.iconplus.smartproc.helper.base.BaseEntity; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.Type; + +import javax.persistence.*; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Entity +@Table(name = "permission") +public class Permission extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Long id; + + @Column(name = "role_id") + private Long roleId; + + @Column(name = "menu_id") + private Long menuId; + + @Column(name = "can_view") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean canView; + + @Column(name = "can_create") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean canCreate; + + @Column(name = "can_read") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean canRead; + + @Column(name = "can_update") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean canUpdate; + + @Column(name = "can_delete") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean canDelete; + + @Column(name = "is_delete") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean isDelete; +} diff --git a/src/main/java/com/iconplus/smartproc/model/entity/RksDaftarIsi.java b/src/main/java/com/iconplus/smartproc/model/entity/RksDaftarIsi.java new file mode 100644 index 0000000..8741fe1 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/entity/RksDaftarIsi.java @@ -0,0 +1,45 @@ +package com.iconplus.smartproc.model.entity; + +import com.iconplus.smartproc.helper.base.BaseEntity; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.Type; + +import javax.persistence.*; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Entity +@Table(name = "rks_daftar_isi") +public class RksDaftarIsi extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Long id; + + @Column(name = "kode_template") + private String kodeTemplate; + + @Column(name = "nama_template") + private String namaTemplate; + + @Column(name = "metode_pengadaan_id") + private Long metodePengadaanId; + + @Column(name = "versi") + private String versi; + + @Column(name = "is_active") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean isActive; + + @Column(name = "is_delete") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean isDelete; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/entity/RksIsi.java b/src/main/java/com/iconplus/smartproc/model/entity/RksIsi.java new file mode 100644 index 0000000..0b64b47 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/entity/RksIsi.java @@ -0,0 +1,58 @@ +package com.iconplus.smartproc.model.entity; + +import com.iconplus.smartproc.helper.base.BaseEntity; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.Type; + +import javax.persistence.*; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Entity +@Table(name = "rks_isi") +public class RksIsi extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Long id; + + @Column(name = "rks_daftar_isi_id") + private Long rksDaftarIsiId; + + @Column(name = "nomor") + private String nomor; + + @Column(name = "parent_id") + private Integer parentId; + + @Column(name = "nama") + private String nama; + + @Column(name = "bab") + private String bab; + + @Column(name = "sub_bab") + private String subBab; + + @Column(name = "urutan") + private String urutan; + + @Column(name = "is_kontrak") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean isKontrak; + + @Column(name = "is_active") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean isActive; + + @Column(name = "is_delete") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean isDelete; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/entity/RksTemplate.java b/src/main/java/com/iconplus/smartproc/model/entity/RksTemplate.java new file mode 100644 index 0000000..ffd9031 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/entity/RksTemplate.java @@ -0,0 +1,47 @@ +package com.iconplus.smartproc.model.entity; + +import com.iconplus.smartproc.helper.base.BaseEntity; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.Type; + +import javax.persistence.*; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Entity +@Table(name = "rks_template") +public class RksTemplate extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Long id; + + @Column(name = "kode_template") + private String kodeTemplate; + + @Column(name = "nama_template") + private String namaTemplate; + + @Column(name = "metode_pengadaan_id") + private Long metodePengadaanId; + + @Column(name = "versi") + private String versi; + + @Column(name = "rks_daftar_isi_id") + private Long rksDaftarIsiId; + + @Column(name = "is_active") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean isActive; + + @Column(name = "is_delete") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean isDelete; +} diff --git a/src/main/java/com/iconplus/smartproc/model/entity/Roles.java b/src/main/java/com/iconplus/smartproc/model/entity/Roles.java new file mode 100644 index 0000000..9e3fda2 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/entity/Roles.java @@ -0,0 +1,38 @@ +package com.iconplus.smartproc.model.entity; + +import com.iconplus.smartproc.helper.base.BaseEntity; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.Type; + +import javax.persistence.*; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Entity +@Table(name = "roles") +public class Roles extends BaseEntity { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Long id; + + @Column(name = "role") + private String role; + + @Column(name = "keterangan") + private String keterangan; + + @Column(name = "is_active") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean isActive; + + @Column(name = "is_delete") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean isDelete; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/entity/StrategiPengadaan.java b/src/main/java/com/iconplus/smartproc/model/entity/StrategiPengadaan.java new file mode 100644 index 0000000..9b84d45 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/entity/StrategiPengadaan.java @@ -0,0 +1,38 @@ +package com.iconplus.smartproc.model.entity; + +import com.iconplus.smartproc.helper.base.BaseEntity; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.Type; + +import javax.persistence.*; + +@Entity +@Table(name = "strategi_pengadaan") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class StrategiPengadaan extends BaseEntity { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private long id; + + @Column(name = "strategi_pengadaan") + private String strategiPengadaan; + + @Column(name = "keterangan") + private String keterangan; + + @Column(name = "is_active") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean isActive; + + @Column(name = "is_delete") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean isDelete; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/entity/SumberDana.java b/src/main/java/com/iconplus/smartproc/model/entity/SumberDana.java new file mode 100644 index 0000000..1e50261 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/entity/SumberDana.java @@ -0,0 +1,38 @@ +package com.iconplus.smartproc.model.entity; + +import com.iconplus.smartproc.helper.base.BaseEntity; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.Type; + +import javax.persistence.*; + +@Entity +@Table(name = "sumber_dana") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class SumberDana extends BaseEntity { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private long id; + + @Column(name = "sumber_dana") + private String sumberDana; + + @Column(name = "keterangan") + private String keterangan; + + @Column(name = "is_active") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean isActive; + + @Column(name = "is_delete") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean isDelete; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/entity/SupplyPositioningMatrix.java b/src/main/java/com/iconplus/smartproc/model/entity/SupplyPositioningMatrix.java new file mode 100644 index 0000000..841b74c --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/entity/SupplyPositioningMatrix.java @@ -0,0 +1,38 @@ +package com.iconplus.smartproc.model.entity; + +import com.iconplus.smartproc.helper.base.BaseEntity; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.Type; + +import javax.persistence.*; + +@Entity +@Table(name = "supply_positioning_matrix") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class SupplyPositioningMatrix extends BaseEntity { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private long id; + + @Column(name = "supply_positioning_matrix") + private String supplyPositioningMatrix; + + @Column(name = "keterangan") + private String keterangan; + + @Column(name = "is_active") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean isActive; + + @Column(name = "is_delete") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean isDelete; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/entity/TokenManagement.java b/src/main/java/com/iconplus/smartproc/model/entity/TokenManagement.java new file mode 100644 index 0000000..c1d2761 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/entity/TokenManagement.java @@ -0,0 +1,49 @@ +package com.iconplus.smartproc.model.entity; + +import com.iconplus.smartproc.helper.base.BaseEntity; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.GenericGenerator; +import org.hibernate.annotations.Type; + +import javax.persistence.*; +import java.sql.Timestamp; + +@Data +@Builder +@Entity +@AllArgsConstructor +@NoArgsConstructor +@Table(name = "token_management") +public class TokenManagement extends BaseEntity { + + @Id + @GeneratedValue(generator = "UUID") + @GenericGenerator( + name = "UUID", + strategy = "org.hibernate.id.UUIDGenerator" + ) + @Column(name = "id") + private String id; + + @Column(name = "user_id") + private Long userId; + + @Column(name = "access_token", length = 2500) + private String accessToken; + + @Column(name = "refresh_token", length = 2500) + private String refreshToken; + + @Column(name = "issued_time") + private Timestamp issuedTime; + + @Column(name = "expired_time") + private Timestamp expiredTime; + + @Column(name = "is_delete") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean isDelete; +} diff --git a/src/main/java/com/iconplus/smartproc/model/entity/UnitInisiator.java b/src/main/java/com/iconplus/smartproc/model/entity/UnitInisiator.java new file mode 100644 index 0000000..3ff82d8 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/entity/UnitInisiator.java @@ -0,0 +1,38 @@ +package com.iconplus.smartproc.model.entity; + +import com.iconplus.smartproc.helper.base.BaseEntity; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.Type; + +import javax.persistence.*; + +@Entity +@Table(name = "unit_inisiator") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class UnitInisiator extends BaseEntity { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private long id; + + @Column(name = "unit_inisiator") + private String unitInisiator; + + @Column(name = "keterangan") + private String keterangan; + + @Column(name = "is_active") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean isActive; + + @Column(name = "is_delete") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean isDelete; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/entity/Users.java b/src/main/java/com/iconplus/smartproc/model/entity/Users.java new file mode 100644 index 0000000..f464a50 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/entity/Users.java @@ -0,0 +1,65 @@ +package com.iconplus.smartproc.model.entity; + +import com.iconplus.smartproc.helper.base.BaseEntity; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.Type; + +import javax.persistence.*; +import java.sql.Timestamp; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Entity +@Table(name = "users") +public class Users extends BaseEntity { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Long id; + + @Column(name = "username") + private String username; + + @Column(name = "nama") + private String nama; + + @Column(name = "email") + private String email; + + @Column(name = "telepon") + private String telepon; + + @Column(name = "password") + private String password; + + @Column(name = "instansi_id") + private Long instansiId; + + @Column(name = "bidang_id") + private Long bidangId; + + @Column(name = "jabatan_id") + private Long jabatanId; + + @Column(name = "role_id") + private Long roleId; + + @Column(name = "remember_id") + private String rememberId; + + @Column(name = "expired_time") + private Timestamp expiredTime; + + @Column(name = "is_active") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean isActive; + + @Column(name = "is_delete") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean isDelete; +} diff --git a/src/main/java/com/iconplus/smartproc/model/projection/BidangView.java b/src/main/java/com/iconplus/smartproc/model/projection/BidangView.java new file mode 100644 index 0000000..6174611 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/projection/BidangView.java @@ -0,0 +1,22 @@ +package com.iconplus.smartproc.model.projection; + +public interface BidangView { + + Long getId(); + void setId(Long id); + + Long getInstansiId(); + void setInstansiId(Long instansiId); + + String getInstansi(); + void setInstansi(String instansi); + + String getBidang(); + void setBidang(String bidang); + + String getKeterangan(); + void setketerangan(String keterangan); + + Boolean getIsActive(); + void setIsActive(Boolean isActive); +}; diff --git a/src/main/java/com/iconplus/smartproc/model/projection/DrpApprovalHistoryView.java b/src/main/java/com/iconplus/smartproc/model/projection/DrpApprovalHistoryView.java new file mode 100644 index 0000000..b10093e --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/projection/DrpApprovalHistoryView.java @@ -0,0 +1,22 @@ +package com.iconplus.smartproc.model.projection; + +import java.sql.Date; + +public interface DrpApprovalHistoryView { + + String getStatus(); + void setStatus(String status); + + Date getDate(); + void setDate(Date date); + + String getCatatan(); + void setCatatan(String catatan); + + String getJabatan(); + void setJabatan(String jabatan); + + String getNama(); + void setNama(String nama); + +} diff --git a/src/main/java/com/iconplus/smartproc/model/projection/DrpApprovalView.java b/src/main/java/com/iconplus/smartproc/model/projection/DrpApprovalView.java new file mode 100644 index 0000000..53a9c23 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/projection/DrpApprovalView.java @@ -0,0 +1,53 @@ +package com.iconplus.smartproc.model.projection; + + +import java.sql.Date; + +public interface DrpApprovalView { + + Long getId(); + void setId(Long id); + + Long getDrpId(); + void setDrpId(Long drpId); + + Integer getTahun(); + void setTahun(); + + String getApproveStatus(); + void setApproveStatus(String approveStatus); + + Date getVpApproveDate(); + void setVpApproveDate(Date vpApproveDate); + + Date getKomiteApproveDate(); + void setKomiteApproveDate(Date komiteApproveDate); + + Date getDirekturApproveDate(); + void setDirekturApproveDate(Date direkturApproveDate); + + Boolean getIsPrint(); + void setIsPrint(Boolean isPrint); + + Date getPrintDate(); + void setPrintDate(Date printDate); + + Boolean getIsApprove(); + void setIsApprove(Boolean isApprove); + + String getCatatan(); + void setCatatan(String catatan); + + String getJabatan(); + void setJabatan(String jabatan); + + String getNama(); + void setNama(String nama); + + String getLevel(); + void setLevel(String level); + + Long getApproverUserId(); + void setApproverUserId(Long approverUserId); + +} diff --git a/src/main/java/com/iconplus/smartproc/model/projection/DrpPengadaanView.java b/src/main/java/com/iconplus/smartproc/model/projection/DrpPengadaanView.java new file mode 100644 index 0000000..4719259 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/projection/DrpPengadaanView.java @@ -0,0 +1,91 @@ +package com.iconplus.smartproc.model.projection; + +import java.math.BigDecimal; +import java.sql.Date; + +public interface DrpPengadaanView { + + Long getId(); + void setId(Long id); + + Long getDrpId(); + void setDrpId(Long drpId); + + String getNomor(); + void setNomor(String nomor); + + String getNamaPengadaan(); + void setNamaPengadaan(String namaPengadaan); + + Long getLokasiId(); + void setLokasiId(Long lokasiId); + + String getLokasi(); + void setLokasi(String lokasi); + + Long getJenisPengadaanId(); + void setJenisPengadaanId(Long jenisPengadaanId); + + String getJenisPengadaan(); + void setJenisPengadaan(String jenisPengadaan); + + Long getUnitInisiatorId(); + void setUnitInisiatorId(Long unitInisiatorId); + + String getUnitInisiator(); + void setUnitInisiator(String unitInisiator); + + BigDecimal getHpe(); + void setHpe(BigDecimal hpe); + + BigDecimal getPagu(); + void setPagu(BigDecimal pagu); + + Long getSumberDanaId(); + void setSumberDanaId(Long sumberDanaId); + + String getSumberDana(); + void setSumberDana(String sumberDana); + + Long getMetodePengadaanId(); + void setMetodePengadaanId(Long metodePengadaanId); + + String getMetodePengadaan(); + void setMetodePengadaan(String metodePengadaan); + + Long getSupplyPositioningMatrixId(); + void setSupplyPositioningMatrixId(Long supplyPositioningMatrixId); + + String getSupplyPositioningMatrix(); + void setSupplyPositioningMatrix(String supplyPositioningMatrix); + + Long getMetodePenyampaianId(); + void setMetodePenyampaianId(Long metodePenyampaianId); + + String getMetodePenyampaian(); + void setMetodePenyampaian(String metodePenyampaian); + + Long getJenisKontrakId(); + void setJenisKontrakId(Long jenisKontrakId); + + String getJenisKontrak(); + void setJenisKontrak(String jenisKontrak); + + Long getStrategiPengadaanId(); + void setStrategiPengadaanId(Long strategiPengadaanId); + + String getStrategiPengadaan(); + void setStrategiPengadaan(String strategiPengadaan); + + Date getRencanaTanggal(); + void setRencanaTanggal(Date rencanaTanggal); + + Date getTargetTanggal(); + void setTargetTanggal(Date targetTanggal); + + Boolean getIsActive(); + void setIsActive(Boolean isActive); + + Boolean getIsDelete(); + void setIsDelete(Boolean isDelete); +} diff --git a/src/main/java/com/iconplus/smartproc/model/projection/DrpRekomendasiView.java b/src/main/java/com/iconplus/smartproc/model/projection/DrpRekomendasiView.java new file mode 100644 index 0000000..9d5738f --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/projection/DrpRekomendasiView.java @@ -0,0 +1,32 @@ +package com.iconplus.smartproc.model.projection; + + +import java.sql.Date; + +public interface DrpRekomendasiView { + + Long getId(); + void setId(Long id); + + String getJabatan(); + void setJabatan(String jabatan); + + Boolean getIsApprove(); + void setIsApprove(Boolean isApprove); + + Date getRekomendasiDate(); + void setRekomendasiDate(Date rekomendasiDate); + + String getRekomendasi(); + void setRekomendasiDate(String rekomendasi); + + String getNomor(); + void setNomor(String nomor); + + String getNamaPengadaan(); + void setNamaPengadaan(String namaPengadaan); + + String getLevel(); + void setLevel(String level); + +} diff --git a/src/main/java/com/iconplus/smartproc/model/projection/DrpView.java b/src/main/java/com/iconplus/smartproc/model/projection/DrpView.java new file mode 100644 index 0000000..1984976 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/projection/DrpView.java @@ -0,0 +1,35 @@ +package com.iconplus.smartproc.model.projection; + +import java.sql.Date; +import java.sql.Timestamp; + +public interface DrpView { + + Long getId(); + void setId(Long id); + + Integer getTahun(); + void setTahun(Integer tahun); + + String getApproveStatus(); + void setApproveStatus(String isApprove); + + Timestamp getApproveDate(); + void setApproveDate(Timestamp approveDate); + + Boolean getIsPrint(); + void setIsPrint(Boolean isPrint); + + Date getPrintDate(); + void setPrintDate(Date printDate); + + Integer getTotalPengadaan(); + void setTotalPengadaan(Integer totalPengadaan); + + + Boolean getIsActive(); + void setIsActive(Boolean isActive); + + Boolean getIsDelete(); + void setIsDelete(Boolean isDelete); +} diff --git a/src/main/java/com/iconplus/smartproc/model/projection/InstansiView.java b/src/main/java/com/iconplus/smartproc/model/projection/InstansiView.java new file mode 100644 index 0000000..3dd7329 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/projection/InstansiView.java @@ -0,0 +1,23 @@ +package com.iconplus.smartproc.model.projection; + +public interface InstansiView { + + Long getId(); + void setId(Long id); + + String getInstansi(); + void setInstansi(String instansi); + + String getAlamat(); + void setAlamat(String alamat); + + String getKeterangan(); + void setKeterangan(String keterangan); + + Boolean getIsActive(); + void setIsActive(Boolean isActive); + + Boolean getIsDelete(); + void setIsDelete(Boolean isDelete); + +} diff --git a/src/main/java/com/iconplus/smartproc/model/projection/JabatanView.java b/src/main/java/com/iconplus/smartproc/model/projection/JabatanView.java new file mode 100644 index 0000000..da19fd4 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/projection/JabatanView.java @@ -0,0 +1,31 @@ +package com.iconplus.smartproc.model.projection; + +public interface JabatanView { + + Long getId(); + void setId(Long id); + + String getJabatan(); + void setJabatan(String jabatan); + + String getKeterangan(); + void setKeterangan(String keterangan); + + Long getInstansiId(); + void setInstansiId(Long instansiId); + + String getInstansi(); + void setInstansi(String instansi); + + Long getBidangId(); + void setBidangId(Long bidangId); + + String getBidang(); + void setBidang(String bidang); + + Boolean getIsActive(); + void setIsActive(Boolean isAvtive); + + Boolean getIsDelete(); + void setIsDelete(Boolean isDelete); +} diff --git a/src/main/java/com/iconplus/smartproc/model/projection/JenisAnggaranView.java b/src/main/java/com/iconplus/smartproc/model/projection/JenisAnggaranView.java new file mode 100644 index 0000000..28ace7e --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/projection/JenisAnggaranView.java @@ -0,0 +1,16 @@ +package com.iconplus.smartproc.model.projection; + +public interface JenisAnggaranView { + + Long getId(); + String getJenisAnggaran(); + String getKeterangan(); + String getIsActive(); + Boolean getIsDelete(); + + void setId(Long id); + void setJenisAnggaran(String jenisAnggaran); + void setKeterangan(String keterangan); + void setIsActive(Boolean isActive); + void setIsDelete(Boolean isDelete); +} diff --git a/src/main/java/com/iconplus/smartproc/model/projection/JenisKontrakView.java b/src/main/java/com/iconplus/smartproc/model/projection/JenisKontrakView.java new file mode 100644 index 0000000..c5d1018 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/projection/JenisKontrakView.java @@ -0,0 +1,15 @@ +package com.iconplus.smartproc.model.projection; + +public interface JenisKontrakView { + Long getId(); + String getJenisKontrak(); + String getKeterangan(); + Boolean getIsActive(); + Boolean getIsDelete(); + + void setId(Long id); + void setJenisKontrak(String jenisKontrak); + void setKeterangan(String keterangan); + void setIsActive(Boolean isActive); + void setIsDelete(Boolean isDelete); +} diff --git a/src/main/java/com/iconplus/smartproc/model/projection/JenisPengadaanView.java b/src/main/java/com/iconplus/smartproc/model/projection/JenisPengadaanView.java new file mode 100644 index 0000000..702dc10 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/projection/JenisPengadaanView.java @@ -0,0 +1,16 @@ +package com.iconplus.smartproc.model.projection; + +public interface JenisPengadaanView { + + Long getId(); + void setId(Long id); + + String getJenisPengadaan(); + void setJenisPengadaan(String jenisPengadaan); + + String getKeterangan(); + void setKeterangan(String keterangan); + + Boolean getIsActive(); + void setIsActive(Boolean isActive); +} diff --git a/src/main/java/com/iconplus/smartproc/model/projection/LokasiView.java b/src/main/java/com/iconplus/smartproc/model/projection/LokasiView.java new file mode 100644 index 0000000..3854c8e --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/projection/LokasiView.java @@ -0,0 +1,16 @@ +package com.iconplus.smartproc.model.projection; + +public interface LokasiView { + + Long getId(); + String getLokasi(); + String getKeterangan(); + Boolean getIsActive(); + Boolean getIsDelete(); + + void setId(Long id); + void setLokasi(String lokasi); + void setKeterangan(String keterangan); + void setIsActive(Boolean isActive); + void setIsDelete(Boolean isDelete); +} diff --git a/src/main/java/com/iconplus/smartproc/model/projection/MenusPermissionView.java b/src/main/java/com/iconplus/smartproc/model/projection/MenusPermissionView.java new file mode 100644 index 0000000..02a3d7a --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/projection/MenusPermissionView.java @@ -0,0 +1,38 @@ +package com.iconplus.smartproc.model.projection; + +public interface MenusPermissionView { + + Long getId(); + void setId(Long id); + + String getNama(); + void setNama(String nama); + + Long getParentId(); + void setParentId(Long parentId); + + Long getUrutan(); + void setUrutan(Long urutan); + + String getIcon(); + void setIcon(String icon); + + String getLink(); + void setLink(String link); + + Boolean getCanView(); + void setCanView(Boolean canView); + + Boolean getCanRead(); + void setCanRead(Boolean canRead); + + Boolean getCanCreate(); + void setCanCreate(Boolean canCreate); + + Boolean getCanUpdate(); + void setCanUpdate(Boolean canUpdate); + + Boolean getCanDelete(); + void setCanDelete(Boolean canDelete); + +} diff --git a/src/main/java/com/iconplus/smartproc/model/projection/MetodePengadaanView.java b/src/main/java/com/iconplus/smartproc/model/projection/MetodePengadaanView.java new file mode 100644 index 0000000..d8601ac --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/projection/MetodePengadaanView.java @@ -0,0 +1,16 @@ +package com.iconplus.smartproc.model.projection; + +public interface MetodePengadaanView { + + Long getId(); + String getMetodePengadaan(); + String getKeterangan(); + Boolean getIsActive(); + Boolean getIsDelete(); + + void setId(Long id); + void setMetodePengadaan(String metodePengadaan); + void setKeterangan(String keterangan); + void setIsActive(Boolean isActive); + void setIsDelete(Boolean isDelete); +} diff --git a/src/main/java/com/iconplus/smartproc/model/projection/MetodePenyampaianView.java b/src/main/java/com/iconplus/smartproc/model/projection/MetodePenyampaianView.java new file mode 100644 index 0000000..423549f --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/projection/MetodePenyampaianView.java @@ -0,0 +1,16 @@ +package com.iconplus.smartproc.model.projection; + +public interface MetodePenyampaianView { + + Long getId(); + String getMetodePenyampaian(); + String getKeterangan(); + Boolean getIsActive(); + Boolean getIsDelete(); + + void setId(Long id); + void setMetodePenyampaian(String metodePenyampaian); + void setKeterangan(String keterangan); + void setIsActive(Boolean isActive); + void setIsDelete(Boolean isDelete); +} diff --git a/src/main/java/com/iconplus/smartproc/model/projection/PermissionView.java b/src/main/java/com/iconplus/smartproc/model/projection/PermissionView.java new file mode 100644 index 0000000..d9e0462 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/projection/PermissionView.java @@ -0,0 +1,29 @@ +package com.iconplus.smartproc.model.projection; + +public interface PermissionView { + + Long getParentId(); + void setParentId(Long parentId); + + Long getMenuId(); + void setMenuId(Long menuId); + + String getNama(); + void setNama(String nama); + + Boolean getCanView(); + void setCanView(Boolean canView); + + Boolean getCanRead(); + void setCanRead(Boolean canRead); + + Boolean getCanUpdate(); + void setCanUpdate(Boolean canUpdate); + + Boolean getCanDelete(); + void setCanDelete(Boolean canDelete); + + Boolean getCanCreate(); + void setCanCreate(Boolean canCreate); + +} diff --git a/src/main/java/com/iconplus/smartproc/model/projection/RksDaftarIsiView.java b/src/main/java/com/iconplus/smartproc/model/projection/RksDaftarIsiView.java new file mode 100644 index 0000000..cdfe389 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/projection/RksDaftarIsiView.java @@ -0,0 +1,29 @@ +package com.iconplus.smartproc.model.projection; + +public interface RksDaftarIsiView { + + Long getId(); + void setId(Long id); + + String getKodeTemplate(); + void setKodeTemplate(String kodeTemplate); + + String getNamaTemplate(); + void setNamaTemplate(String namaTemplate); + + Long getMetodePengadaanId(); + void setMetodePengadaanId(Long metodePengadaanId); + + String getMetodePengadaan(); + void setMetodePengadaan(String metodePengadaan); + + String getVersi(); + void setVersi(String versi); + + Boolean getIsActive(); + void setIsActive(Boolean isActive); + + Boolean getIsDelete(); + void setIsDelete(Boolean isDelete); + +} diff --git a/src/main/java/com/iconplus/smartproc/model/projection/RksTemplateView.java b/src/main/java/com/iconplus/smartproc/model/projection/RksTemplateView.java new file mode 100644 index 0000000..ab3ce5e --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/projection/RksTemplateView.java @@ -0,0 +1,35 @@ +package com.iconplus.smartproc.model.projection; + +public interface RksTemplateView { + + Long getId(); + void setId(Long id); + + String getKodeTemplate(); + void setKodeTemplate(String kodeTemplate); + + String getNamaTemplate(); + void setNamaTemplate(String namaTemplate); + + Long getMetodePengadaanId(); + void setMetodePengadaanId(Long metodePengadaanId); + + String getMetodePengadaan(); + void setMetodePengadaan(String metodePengadaan); + + String getVersi(); + void setVersi(String versi); + + Long getRksDaftarIsiId(); + void setRksDaftarIsiId(Long rksDaftarIsiId); + + String getDaftarIsi(); + void setDaftarIsi(String daftarIsi); + + Boolean getIsActive(); + void setIsActive(Boolean isActive); + + Boolean getIsDelete(); + void setIsDelete(Boolean isDelete); + +} diff --git a/src/main/java/com/iconplus/smartproc/model/projection/RolesView.java b/src/main/java/com/iconplus/smartproc/model/projection/RolesView.java new file mode 100644 index 0000000..78e6519 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/projection/RolesView.java @@ -0,0 +1,16 @@ +package com.iconplus.smartproc.model.projection; + +public interface RolesView { + + Long getId(); + String getRole(); + String getKeterangan(); + Boolean getIsActive(); + Boolean getIsDelete(); + + void setId(Long id); + void setRole(String role); + void setKeterangan(String keterangan); + void setIsActive(Boolean isActive); + void setIsDelete(Boolean isDelete); +} diff --git a/src/main/java/com/iconplus/smartproc/model/projection/StrategiPengadaanView.java b/src/main/java/com/iconplus/smartproc/model/projection/StrategiPengadaanView.java new file mode 100644 index 0000000..417435b --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/projection/StrategiPengadaanView.java @@ -0,0 +1,16 @@ +package com.iconplus.smartproc.model.projection; + +public interface StrategiPengadaanView { + + Long getId(); + String getStrategiPengadaan(); + String getKeterangan(); + Boolean getIsActive(); + Boolean getIsDelete(); + + void setId(Long id); + void setStrategiPengadaan(String strategiPengadaan); + void setKeterangan(String keterangan); + void setIsActive(Boolean isActive); + void setIsDelete(Boolean isDelete); +} diff --git a/src/main/java/com/iconplus/smartproc/model/projection/SumberDanaView.java b/src/main/java/com/iconplus/smartproc/model/projection/SumberDanaView.java new file mode 100644 index 0000000..22e0572 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/projection/SumberDanaView.java @@ -0,0 +1,17 @@ +package com.iconplus.smartproc.model.projection; + +public interface SumberDanaView { + + Long getId(); + void setId(); + + String getKeterangan(); + void setKeterangan(String keterangan); + + String getSumberDana(); + void setSumberDana(String sumberDana); + + Boolean getIsActive(); + void setIsActive(Boolean isActive); + +} diff --git a/src/main/java/com/iconplus/smartproc/model/projection/SupplyPositioningMatrixView.java b/src/main/java/com/iconplus/smartproc/model/projection/SupplyPositioningMatrixView.java new file mode 100644 index 0000000..9f84160 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/projection/SupplyPositioningMatrixView.java @@ -0,0 +1,16 @@ +package com.iconplus.smartproc.model.projection; + +public interface SupplyPositioningMatrixView { + + Long getId(); + String getSupplyPositioningMatrix(); + String getKeterangan(); + Boolean getIsActive(); + Boolean getIsDelete(); + + void setId(Long id); + void setSupplyPositioningMatrix(String supplyPositioningMatrix); + void setKeterangan(String keterangan); + void setIsActive(Boolean isActive); + void setIsDelete(Boolean isDelete); +} diff --git a/src/main/java/com/iconplus/smartproc/model/projection/TokenManagementView.java b/src/main/java/com/iconplus/smartproc/model/projection/TokenManagementView.java new file mode 100644 index 0000000..ace9aff --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/projection/TokenManagementView.java @@ -0,0 +1,15 @@ +package com.iconplus.smartproc.model.projection; + + +public interface TokenManagementView { + + String getId(); + void setId(String id); + + Long getUserId(); + void setUserId(Long userId); + + String getAccessToken(); + void setAccessToken(String accessToken); + +} diff --git a/src/main/java/com/iconplus/smartproc/model/projection/UnitInisiatorView.java b/src/main/java/com/iconplus/smartproc/model/projection/UnitInisiatorView.java new file mode 100644 index 0000000..4928f5d --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/projection/UnitInisiatorView.java @@ -0,0 +1,20 @@ +package com.iconplus.smartproc.model.projection; + +public interface UnitInisiatorView { + + Long getId(); + void setId(Long id); + + String getUnitInisiator(); + void setUnitInisiator(String unitInisiator); + + String getKeterangan(); + void setKeterangan(String keterangan); + + Boolean getIsActive(); + void setIsActive(Boolean isActive); + + Boolean getIsDelete(); + void setIsDelete(Boolean isDelete); + +} diff --git a/src/main/java/com/iconplus/smartproc/model/projection/UserRoleView.java b/src/main/java/com/iconplus/smartproc/model/projection/UserRoleView.java new file mode 100644 index 0000000..95ef7fe --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/projection/UserRoleView.java @@ -0,0 +1,39 @@ +package com.iconplus.smartproc.model.projection; + +public interface UserRoleView { + + Long getId(); + String getUsername(); + String getNama(); + String getEmail(); + Long getInstansiId(); + String getInstansi(); + Long getBidangId(); + String getBidang(); + Long getJabatanId(); + String getJabatan(); + Boolean getIsActive(); + String getPassword(); + Long getRoleId(); + String getRole(); + Boolean getIsDelete(); + String getTelepon(); + + void setId(Long id); + void setUsername(String username); + void setNama(String nama); + void setEmail(String email); + void setInstansiId(Long instansiId); + void setInstansi(String instansi); + void setBidangId(Long bidangId); + void setBidang(String bidang); + void setJabatanId(Long jabatanId); + void setJabatan(String Jabatan); + void setIsActive(Boolean isActive); + void setPassword(String password); + void setRoleId(Long roleId); + void setRole(String role); + void setIsDelete(Boolean isDelete); + void setTelepon(String telepon); + +} diff --git a/src/main/java/com/iconplus/smartproc/model/request/BidangRequest.java b/src/main/java/com/iconplus/smartproc/model/request/BidangRequest.java new file mode 100644 index 0000000..05c0f0c --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/BidangRequest.java @@ -0,0 +1,24 @@ +package com.iconplus.smartproc.model.request; + +import com.iconplus.smartproc.helper.base.BaseRequest; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.data.domain.Pageable; + + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class BidangRequest extends BaseRequest { + + private Long id; + private Long instansiId; + private String bidang; + private String keterangan; + private Boolean isActive; + private String search; + private transient Pageable pageable; +} diff --git a/src/main/java/com/iconplus/smartproc/model/request/ChangePasswordRequest.java b/src/main/java/com/iconplus/smartproc/model/request/ChangePasswordRequest.java new file mode 100644 index 0000000..041ffb5 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/ChangePasswordRequest.java @@ -0,0 +1,17 @@ +package com.iconplus.smartproc.model.request; + +import com.iconplus.smartproc.helper.base.BaseRequest; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class ChangePasswordRequest extends BaseRequest { + private String currentPassword; + private String newPassword; + private String confirmationPassword; +} diff --git a/src/main/java/com/iconplus/smartproc/model/request/DrpApprovalRequest.java b/src/main/java/com/iconplus/smartproc/model/request/DrpApprovalRequest.java new file mode 100644 index 0000000..655be50 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/DrpApprovalRequest.java @@ -0,0 +1,26 @@ +package com.iconplus.smartproc.model.request; + +import com.iconplus.smartproc.helper.base.BaseRequest; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.data.domain.Pageable; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class DrpApprovalRequest extends BaseRequest { + + private Long userId; + private Boolean isApprove; + private Long drpId; + private Long approverUserId; + private String level; + private Long jenisPengadaanId; + private String catatan; + + private String search; + private transient Pageable pageable; +} diff --git a/src/main/java/com/iconplus/smartproc/model/request/DrpDokumenRequest.java b/src/main/java/com/iconplus/smartproc/model/request/DrpDokumenRequest.java new file mode 100644 index 0000000..122e316 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/DrpDokumenRequest.java @@ -0,0 +1,22 @@ +package com.iconplus.smartproc.model.request; + +import com.iconplus.smartproc.helper.base.BaseRequest; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.web.multipart.MultipartFile; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class DrpDokumenRequest extends BaseRequest { + + private Long drpId; + private Long jenisDokumenId; + private String filename; + private String keterangan; + private MultipartFile file; + private Boolean isDelete; +} diff --git a/src/main/java/com/iconplus/smartproc/model/request/DrpPengadaanDokumenRequest.java b/src/main/java/com/iconplus/smartproc/model/request/DrpPengadaanDokumenRequest.java new file mode 100644 index 0000000..8510e9b --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/DrpPengadaanDokumenRequest.java @@ -0,0 +1,26 @@ +package com.iconplus.smartproc.model.request; + +import com.iconplus.smartproc.helper.base.BaseRequest; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.web.multipart.MultipartFile; + +import javax.persistence.Entity; +import javax.persistence.Table; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class DrpPengadaanDokumenRequest extends BaseRequest { + + private Long id; + private Long drpId; + private Long jenisDokumenId; + private String filename; + private MultipartFile file; + private String keterangan; + private Boolean isDelete; +} diff --git a/src/main/java/com/iconplus/smartproc/model/request/DrpPengadaanRequest.java b/src/main/java/com/iconplus/smartproc/model/request/DrpPengadaanRequest.java new file mode 100644 index 0000000..7b80947 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/DrpPengadaanRequest.java @@ -0,0 +1,45 @@ +package com.iconplus.smartproc.model.request; + +import com.iconplus.smartproc.helper.base.BaseRequest; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.data.domain.Pageable; + +import java.math.BigDecimal; +import java.sql.Date; +import java.sql.Timestamp; +import java.util.List; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class DrpPengadaanRequest extends BaseRequest { + + private Long id; + private Long drpId; + private String nomor; + private String namaPengadaan; + private Long lokasiId; + private Long jenisPengadaanId; + private Long unitInisiatorId; + private BigDecimal pagu; + private Long sumberDanaId; + private Long supplyPositioningMatrixId; + private Long metodePengadaanId; + private Long metodePenyampaianId; + private Long jenisKontrakId; + private Long strategiPengadaanId; + private Date rencanaTanggal; + private Date targetTanggal; + private BigDecimal hpe; + private Boolean isActive; + private Boolean isDelete; + + private List dataDrpPengadaanDokumen; + + private transient Pageable pageable; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/request/DrpRekomendasiRequest.java b/src/main/java/com/iconplus/smartproc/model/request/DrpRekomendasiRequest.java new file mode 100644 index 0000000..015e9c5 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/DrpRekomendasiRequest.java @@ -0,0 +1,29 @@ +package com.iconplus.smartproc.model.request; + +import com.iconplus.smartproc.helper.base.BaseRequest; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.data.domain.Pageable; + +import java.sql.Date; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class DrpRekomendasiRequest extends BaseRequest { + + private Long id; + private Long drpApprovalId; + private Long userId; + private Long drpId; + private Long jenisPengadaanId; + private String rekomendasi; + private Date rekomendasiDate; + private transient Pageable pageable; + + + +} diff --git a/src/main/java/com/iconplus/smartproc/model/request/DrpRequest.java b/src/main/java/com/iconplus/smartproc/model/request/DrpRequest.java new file mode 100644 index 0000000..6183365 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/DrpRequest.java @@ -0,0 +1,30 @@ +package com.iconplus.smartproc.model.request; + +import com.iconplus.smartproc.helper.base.BaseRequest; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.data.domain.Pageable; + +import java.sql.Timestamp; +import java.util.List; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class DrpRequest extends BaseRequest { + private Long id; + private Integer tahun; + private String approveStatus; + private Timestamp approveDate; + private Boolean isActive; + + private List dataDrpDokumen; + + private List dataDrpPengadaanDokumen; + + private String search; + private transient Pageable pageable; +} diff --git a/src/main/java/com/iconplus/smartproc/model/request/ForgotPasswordRequest.java b/src/main/java/com/iconplus/smartproc/model/request/ForgotPasswordRequest.java new file mode 100644 index 0000000..7de7671 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/ForgotPasswordRequest.java @@ -0,0 +1,17 @@ +package com.iconplus.smartproc.model.request; + +import com.iconplus.smartproc.helper.base.BaseRequest; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class ForgotPasswordRequest extends BaseRequest { + private String rememberId; + private String newPassword; + private String confirmationPassword; +} diff --git a/src/main/java/com/iconplus/smartproc/model/request/InitForgotPasswordRequest.java b/src/main/java/com/iconplus/smartproc/model/request/InitForgotPasswordRequest.java new file mode 100644 index 0000000..7f54c0e --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/InitForgotPasswordRequest.java @@ -0,0 +1,16 @@ +package com.iconplus.smartproc.model.request; + +import com.iconplus.smartproc.helper.base.BaseRequest; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class InitForgotPasswordRequest extends BaseRequest { + + private String email; +} diff --git a/src/main/java/com/iconplus/smartproc/model/request/InstansiRequest.java b/src/main/java/com/iconplus/smartproc/model/request/InstansiRequest.java new file mode 100644 index 0000000..6ccc0ea --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/InstansiRequest.java @@ -0,0 +1,25 @@ +package com.iconplus.smartproc.model.request; + +import com.iconplus.smartproc.helper.base.BaseRequest; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.data.domain.Pageable; + + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class InstansiRequest extends BaseRequest { + + private Long id; + private String instansi; + private String alamat; + private String keterangan; + private Boolean isActive; + private String search; + private transient Pageable pageable; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/request/JabatanRequest.java b/src/main/java/com/iconplus/smartproc/model/request/JabatanRequest.java new file mode 100644 index 0000000..c11cc34 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/JabatanRequest.java @@ -0,0 +1,24 @@ +package com.iconplus.smartproc.model.request; + +import com.iconplus.smartproc.helper.base.BaseRequest; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.data.domain.Pageable; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class JabatanRequest extends BaseRequest { + + private Long id; + private String jabatan; + private String keterangan; + private Long instansiId; + private Long bidangId; + private Boolean isActive; + private String search; + private transient Pageable pageable; +} diff --git a/src/main/java/com/iconplus/smartproc/model/request/JenisAnggaranRequest.java b/src/main/java/com/iconplus/smartproc/model/request/JenisAnggaranRequest.java new file mode 100644 index 0000000..8ed6848 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/JenisAnggaranRequest.java @@ -0,0 +1,19 @@ +package com.iconplus.smartproc.model.request; + +import com.iconplus.smartproc.helper.base.BaseRequest; +import lombok.Builder; +import lombok.Data; +import org.springframework.data.domain.Pageable; + +@Data +@Builder +public class JenisAnggaranRequest extends BaseRequest { + + private Long id; + private String jenisAnggaran; + private String keterangan; + private Boolean isActive; + private Boolean isDelete; + private String search; + private transient Pageable pageable; +} diff --git a/src/main/java/com/iconplus/smartproc/model/request/JenisKontrakRequest.java b/src/main/java/com/iconplus/smartproc/model/request/JenisKontrakRequest.java new file mode 100644 index 0000000..e3c1f4e --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/JenisKontrakRequest.java @@ -0,0 +1,23 @@ +package com.iconplus.smartproc.model.request; + +import com.iconplus.smartproc.helper.base.BaseRequest; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.data.domain.Pageable; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class JenisKontrakRequest extends BaseRequest { + + private Long id; + private String jenisKontrak; + private String keterangan; + private Boolean isActive; + private Boolean isDelete; + private String search; + private transient Pageable pageable; +} diff --git a/src/main/java/com/iconplus/smartproc/model/request/JenisPengadaanRequest.java b/src/main/java/com/iconplus/smartproc/model/request/JenisPengadaanRequest.java new file mode 100644 index 0000000..ec8a2f1 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/JenisPengadaanRequest.java @@ -0,0 +1,22 @@ +package com.iconplus.smartproc.model.request; + +import com.iconplus.smartproc.helper.base.BaseRequest; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.data.domain.Pageable; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class JenisPengadaanRequest extends BaseRequest { + + private Long id; + private String jenisPengadaan; + private String keterangan; + private Boolean isActive; + private String search; + private transient Pageable pageable; +} diff --git a/src/main/java/com/iconplus/smartproc/model/request/ListDrpApprovalRequest.java b/src/main/java/com/iconplus/smartproc/model/request/ListDrpApprovalRequest.java new file mode 100644 index 0000000..dcf86ac --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/ListDrpApprovalRequest.java @@ -0,0 +1,20 @@ +package com.iconplus.smartproc.model.request; + +import com.iconplus.smartproc.helper.base.BaseRequest; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class ListDrpApprovalRequest extends BaseRequest { + + private Long id; + private Long drpId; + private List data; +} diff --git a/src/main/java/com/iconplus/smartproc/model/request/ListPermissionRequest.java b/src/main/java/com/iconplus/smartproc/model/request/ListPermissionRequest.java new file mode 100644 index 0000000..4696f29 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/ListPermissionRequest.java @@ -0,0 +1,20 @@ +package com.iconplus.smartproc.model.request; + +import com.iconplus.smartproc.helper.base.BaseRequest; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class ListPermissionRequest extends BaseRequest { + + private Long roleId; + private List data; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/request/LoginRequest.java b/src/main/java/com/iconplus/smartproc/model/request/LoginRequest.java new file mode 100644 index 0000000..c33198e --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/LoginRequest.java @@ -0,0 +1,17 @@ +package com.iconplus.smartproc.model.request; + +import com.iconplus.smartproc.helper.base.BaseRequest; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class LoginRequest extends BaseRequest { + + private String email; + private String password; +} diff --git a/src/main/java/com/iconplus/smartproc/model/request/LokasiRequest.java b/src/main/java/com/iconplus/smartproc/model/request/LokasiRequest.java new file mode 100644 index 0000000..5df5a09 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/LokasiRequest.java @@ -0,0 +1,23 @@ +package com.iconplus.smartproc.model.request; + +import com.iconplus.smartproc.helper.base.BaseRequest; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.data.domain.Pageable; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class LokasiRequest extends BaseRequest { + + private Long id; + private String lokasi; + private String keterangan; + private Boolean isActive; + private Boolean isDelete; + private String search; + private transient Pageable pageable; +} diff --git a/src/main/java/com/iconplus/smartproc/model/request/MetodePengadaanRequest.java b/src/main/java/com/iconplus/smartproc/model/request/MetodePengadaanRequest.java new file mode 100644 index 0000000..28d825d --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/MetodePengadaanRequest.java @@ -0,0 +1,23 @@ +package com.iconplus.smartproc.model.request; + +import com.iconplus.smartproc.helper.base.BaseRequest; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.data.domain.Pageable; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class MetodePengadaanRequest extends BaseRequest { + + private Long id; + private String metodePengadaan; + private String keterangan; + private Boolean isActive; + private Boolean isDelete; + private String search; + private transient Pageable pageable; +} diff --git a/src/main/java/com/iconplus/smartproc/model/request/MetodePenyampaianRequest.java b/src/main/java/com/iconplus/smartproc/model/request/MetodePenyampaianRequest.java new file mode 100644 index 0000000..26f32ef --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/MetodePenyampaianRequest.java @@ -0,0 +1,23 @@ +package com.iconplus.smartproc.model.request; + +import com.iconplus.smartproc.helper.base.BaseRequest; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.data.domain.Pageable; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class MetodePenyampaianRequest extends BaseRequest { + + private Long id; + private String metodePenyampaian; + private String keterangan; + private Boolean isActive; + private Boolean isDelete; + private String search; + private transient Pageable pageable; +} diff --git a/src/main/java/com/iconplus/smartproc/model/request/PermissionRequest.java b/src/main/java/com/iconplus/smartproc/model/request/PermissionRequest.java new file mode 100644 index 0000000..909d4c6 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/PermissionRequest.java @@ -0,0 +1,23 @@ +package com.iconplus.smartproc.model.request; + +import com.iconplus.smartproc.helper.base.BaseRequest; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class PermissionRequest extends BaseRequest { + private Long id; + private Long parentId; + private Long menuId; + private String menu; + private Boolean canView; + private Boolean canCreate; + private Boolean canRead; + private Boolean canDelete; + private Boolean canUpdate; +} diff --git a/src/main/java/com/iconplus/smartproc/model/request/PostAccessTokenRequest.java b/src/main/java/com/iconplus/smartproc/model/request/PostAccessTokenRequest.java new file mode 100644 index 0000000..e426cf0 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/PostAccessTokenRequest.java @@ -0,0 +1,16 @@ +package com.iconplus.smartproc.model.request; + +import com.iconplus.smartproc.helper.base.BaseRequest; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class PostAccessTokenRequest extends BaseRequest { + + private String accessToken; +} \ No newline at end of file diff --git a/src/main/java/com/iconplus/smartproc/model/request/PrintDrpRequest.java b/src/main/java/com/iconplus/smartproc/model/request/PrintDrpRequest.java new file mode 100644 index 0000000..da471e8 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/PrintDrpRequest.java @@ -0,0 +1,18 @@ +package com.iconplus.smartproc.model.request; + +import com.iconplus.smartproc.helper.base.BaseRequest; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.data.domain.Pageable; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class PrintDrpRequest extends BaseRequest { + + private Long drpId; + private transient Pageable pageable; +} diff --git a/src/main/java/com/iconplus/smartproc/model/request/RefreshTokenRequest.java b/src/main/java/com/iconplus/smartproc/model/request/RefreshTokenRequest.java new file mode 100644 index 0000000..d56621f --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/RefreshTokenRequest.java @@ -0,0 +1,15 @@ +package com.iconplus.smartproc.model.request; + +import com.iconplus.smartproc.helper.base.BaseRequest; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class RefreshTokenRequest extends BaseRequest { + private String refreshToken; +} diff --git a/src/main/java/com/iconplus/smartproc/model/request/RksDaftarIsiRequest.java b/src/main/java/com/iconplus/smartproc/model/request/RksDaftarIsiRequest.java new file mode 100644 index 0000000..c8b4d4a --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/RksDaftarIsiRequest.java @@ -0,0 +1,24 @@ +package com.iconplus.smartproc.model.request; + +import com.iconplus.smartproc.helper.base.BaseRequest; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.data.domain.Pageable; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class RksDaftarIsiRequest extends BaseRequest { + + private Long id; + private String kodeTemplate; + private String namaTemplate; + private Long metodePengadaanId; + private String versi; + + private transient Pageable pageable; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/request/RksIsiRequest.java b/src/main/java/com/iconplus/smartproc/model/request/RksIsiRequest.java new file mode 100644 index 0000000..ae8cf4d --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/RksIsiRequest.java @@ -0,0 +1,36 @@ +package com.iconplus.smartproc.model.request; + +import com.iconplus.smartproc.helper.base.BaseRequest; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.Type; +import org.springframework.data.domain.Pageable; + +import javax.persistence.Column; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class RksIsiRequest extends BaseRequest { + + private Long id; + private Long rksDaftarIsiId; + private String nomor; + private Integer parentId; + private String nama; + private String bab; + private String subBab; + private String urutan; + private Boolean isKontrak; + private Boolean isActive; + private Boolean isDelete; + + private transient Pageable pageable; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/request/RksTemplateRequest.java b/src/main/java/com/iconplus/smartproc/model/request/RksTemplateRequest.java new file mode 100644 index 0000000..0fdfcab --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/RksTemplateRequest.java @@ -0,0 +1,26 @@ +package com.iconplus.smartproc.model.request; + +import com.iconplus.smartproc.helper.base.BaseRequest; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.data.domain.Pageable; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class RksTemplateRequest extends BaseRequest { + + private Long id; + private String kodeTemplate; + private String namaTemplate; + private Long metodePengadaanId; + private String versi; + private Long rksDaftarIsiId; + private Boolean isActive; + private Boolean isDelete; + + private transient Pageable pageable; +} diff --git a/src/main/java/com/iconplus/smartproc/model/request/RolesRequest.java b/src/main/java/com/iconplus/smartproc/model/request/RolesRequest.java new file mode 100644 index 0000000..7177a9b --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/RolesRequest.java @@ -0,0 +1,24 @@ +package com.iconplus.smartproc.model.request; + +import com.iconplus.smartproc.helper.base.BaseRequest; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.data.domain.Pageable; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class RolesRequest extends BaseRequest { + + private Long id; + private String role; + private String keterangan; + private Boolean isActive; + private Boolean isDelete; + private String search; + private transient Pageable pageable; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/request/StrategiPengadaanRequest.java b/src/main/java/com/iconplus/smartproc/model/request/StrategiPengadaanRequest.java new file mode 100644 index 0000000..be306f9 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/StrategiPengadaanRequest.java @@ -0,0 +1,23 @@ +package com.iconplus.smartproc.model.request; + +import com.iconplus.smartproc.helper.base.BaseRequest; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.data.domain.Pageable; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class StrategiPengadaanRequest extends BaseRequest { + + private Long id; + private String strategiPengadaan; + private String keterangan; + private Boolean isActive; + private Boolean isDelete; + private String search; + private transient Pageable pageable; +} diff --git a/src/main/java/com/iconplus/smartproc/model/request/SumberDanaRequest.java b/src/main/java/com/iconplus/smartproc/model/request/SumberDanaRequest.java new file mode 100644 index 0000000..11a7802 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/SumberDanaRequest.java @@ -0,0 +1,23 @@ +package com.iconplus.smartproc.model.request; + +import com.iconplus.smartproc.helper.base.BaseRequest; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.data.domain.Pageable; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class SumberDanaRequest extends BaseRequest { + + private Long id; + private String sumberDana; + private String keterangan; + private Boolean isActive; + private String search; + private transient Pageable pageable; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/request/SupplyPositioningMatrixRequest.java b/src/main/java/com/iconplus/smartproc/model/request/SupplyPositioningMatrixRequest.java new file mode 100644 index 0000000..b010ef6 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/SupplyPositioningMatrixRequest.java @@ -0,0 +1,23 @@ +package com.iconplus.smartproc.model.request; + +import com.iconplus.smartproc.helper.base.BaseRequest; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.data.domain.Pageable; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SupplyPositioningMatrixRequest extends BaseRequest { + + private Long id; + private String supplyPositioningMatrix; + private String keterangan; + private Boolean isActive; + private Boolean isDelete; + private String search; + private transient Pageable pageable; +} diff --git a/src/main/java/com/iconplus/smartproc/model/request/UnitInisiatorRequest.java b/src/main/java/com/iconplus/smartproc/model/request/UnitInisiatorRequest.java new file mode 100644 index 0000000..a88ee4d --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/UnitInisiatorRequest.java @@ -0,0 +1,22 @@ +package com.iconplus.smartproc.model.request; + +import com.iconplus.smartproc.helper.base.BaseRequest; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.data.domain.Pageable; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class UnitInisiatorRequest extends BaseRequest { + + private Long id; + private String unitInisiator; + private String keterangan; + private Boolean isActive; + private String search; + private transient Pageable pageable; +} diff --git a/src/main/java/com/iconplus/smartproc/model/request/UsersRequest.java b/src/main/java/com/iconplus/smartproc/model/request/UsersRequest.java new file mode 100644 index 0000000..be46f3d --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/request/UsersRequest.java @@ -0,0 +1,33 @@ +package com.iconplus.smartproc.model.request; + +import com.iconplus.smartproc.helper.base.BaseRequest; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.data.domain.Pageable; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class UsersRequest extends BaseRequest { + + private Long id; + private String username; + private String password; + private Long instansiId; + private String instansi; + private Long bidangId; + private String bidang; + private String nama; + private Long jabatanId; + private String jabatan; + private Long roleId; + private String role; + private String email; + private String telepon; + private Boolean isActive; + private String search; + private transient Pageable pageable; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/BidangResponse.java b/src/main/java/com/iconplus/smartproc/model/response/BidangResponse.java new file mode 100644 index 0000000..0069708 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/BidangResponse.java @@ -0,0 +1,23 @@ +package com.iconplus.smartproc.model.response; + +import com.iconplus.smartproc.helper.base.BaseResponse; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class BidangResponse extends BaseResponse { + + private Long id; + private Long instansiId; + private String instansi; + private String bidang; + private String keterangan; + private Boolean isActive; + private Boolean isDelete; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/DrpApprovalHistoryResponse.java b/src/main/java/com/iconplus/smartproc/model/response/DrpApprovalHistoryResponse.java new file mode 100644 index 0000000..96d0684 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/DrpApprovalHistoryResponse.java @@ -0,0 +1,25 @@ +package com.iconplus.smartproc.model.response; + +import com.iconplus.smartproc.helper.base.BaseResponse; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.sql.Date; + + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class DrpApprovalHistoryResponse extends BaseResponse { + + private Long drpId; + private String status; + private Date date; + private String catatan; + private String nama; + private String jabatan; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/DrpApprovalResponse.java b/src/main/java/com/iconplus/smartproc/model/response/DrpApprovalResponse.java new file mode 100644 index 0000000..0c9069e --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/DrpApprovalResponse.java @@ -0,0 +1,30 @@ +package com.iconplus.smartproc.model.response; + +import com.iconplus.smartproc.helper.base.BaseResponse; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.sql.Date; +import java.util.List; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class DrpApprovalResponse extends BaseResponse { + + private Long id; + private Long drpId; + private Integer tahun; + private String approveStatus; + private Date approverVpDate; + private Date approverKomiteDate; + private Date approverDirekturDate; + + private DrpPengadaanResponse dataPengadaan; + private List dataPengadaanDokumen; + private List dataRekomendasi; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/DrpDokumenResponse.java b/src/main/java/com/iconplus/smartproc/model/response/DrpDokumenResponse.java new file mode 100644 index 0000000..b04d0f8 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/DrpDokumenResponse.java @@ -0,0 +1,23 @@ +package com.iconplus.smartproc.model.response; + +import com.iconplus.smartproc.helper.base.BaseResponse; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.sql.Timestamp; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class DrpDokumenResponse extends BaseResponse { + + private Long id; + private Long drpId; + private Long jenisDokumenId; + private String filename; + private String keterangan; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/DrpPengadaanDokumenResponse.java b/src/main/java/com/iconplus/smartproc/model/response/DrpPengadaanDokumenResponse.java new file mode 100644 index 0000000..e518ff8 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/DrpPengadaanDokumenResponse.java @@ -0,0 +1,23 @@ +package com.iconplus.smartproc.model.response; + +import com.iconplus.smartproc.helper.base.BaseResponse; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class DrpPengadaanDokumenResponse extends BaseResponse { + + private Long id; + private Long drpId; + private Long jenisDokumenId; + private String filename; + private String keterangan; + private Boolean isDelete; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/DrpPengadaanResponse.java b/src/main/java/com/iconplus/smartproc/model/response/DrpPengadaanResponse.java new file mode 100644 index 0000000..b69277c --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/DrpPengadaanResponse.java @@ -0,0 +1,61 @@ +package com.iconplus.smartproc.model.response; + +import com.iconplus.smartproc.helper.base.BaseResponse; +import com.iconplus.smartproc.model.request.DrpPengadaanDokumenRequest; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.math.BigDecimal; +import java.sql.Date; +import java.sql.Timestamp; +import java.util.List; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class DrpPengadaanResponse extends BaseResponse { + + private Long id; + private Long drpId; + private String nomor; + private String namaPengadaan; + private BigDecimal pagu; + + private Long lokasiId; + private String lokasi; + + private Long jenisPengadaanId; + private String jenisPengadaan; + + private Long unitInisiatorId; + private String unitInisiator; + + private Long sumberDanaId; + private String sumberDana; + + private Long supplyPositioningMatrixId; + private String supplyPositioningMatrix; + + private Long metodePengadaanId; + private String metodePengadaan; + + private Long metodePenyampaianId; + private String metodePenyampaian; + + private Long jenisKontrakId; + private String jenisKontrak; + + private Long strategiPengadaanId; + private String strategiPengadaan; + + private Date rencanaTanggal; + private Date targetTanggal; + private BigDecimal hpe; + private Boolean isActive; + private Boolean isDelete; + + private List dataDrpPengadaanDokumen; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/DrpRekomendasiResponse.java b/src/main/java/com/iconplus/smartproc/model/response/DrpRekomendasiResponse.java new file mode 100644 index 0000000..1fc1eec --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/DrpRekomendasiResponse.java @@ -0,0 +1,27 @@ +package com.iconplus.smartproc.model.response; + +import com.iconplus.smartproc.helper.base.BaseResponse; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.sql.Date; + + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class DrpRekomendasiResponse extends BaseResponse { + + private Long id; + private String nomorRkp; + private String namaPengadaan; + private String approval; + private String status; + private Date approveDate; + private Date rekomendasiDate; + private String rekomendasi; + private String jabatan;; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/DrpResponse.java b/src/main/java/com/iconplus/smartproc/model/response/DrpResponse.java new file mode 100644 index 0000000..ef90e6d --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/DrpResponse.java @@ -0,0 +1,28 @@ +package com.iconplus.smartproc.model.response; + +import com.iconplus.smartproc.helper.base.BaseResponse; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; +import java.util.List; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class DrpResponse extends BaseResponse { + private Long id; + private Integer tahun; + private String approveStatus; + private Date approveDate; + private Boolean isActive; + private Boolean isDelete; + private Integer totalPengadaan; + + private List dataDrpDokumen; + + private List dataDrpDokumenPendukung; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/GetListBidangResponse.java b/src/main/java/com/iconplus/smartproc/model/response/GetListBidangResponse.java new file mode 100644 index 0000000..742a32f --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/GetListBidangResponse.java @@ -0,0 +1,20 @@ +package com.iconplus.smartproc.model.response; + +import com.iconplus.smartproc.helper.base.BaseResponse; +import com.iconplus.smartproc.helper.model.Pagination; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class GetListBidangResponse extends BaseResponse { + + private List data; + private Pagination pagination; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/GetListDrpApprovalHistoryResponse.java b/src/main/java/com/iconplus/smartproc/model/response/GetListDrpApprovalHistoryResponse.java new file mode 100644 index 0000000..1107abb --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/GetListDrpApprovalHistoryResponse.java @@ -0,0 +1,18 @@ +package com.iconplus.smartproc.model.response; + +import com.iconplus.smartproc.helper.base.BaseResponse; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class GetListDrpApprovalHistoryResponse extends BaseResponse { + + private List data; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/GetListDrpApprovalResponse.java b/src/main/java/com/iconplus/smartproc/model/response/GetListDrpApprovalResponse.java new file mode 100644 index 0000000..b388ae9 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/GetListDrpApprovalResponse.java @@ -0,0 +1,20 @@ +package com.iconplus.smartproc.model.response; + +import com.iconplus.smartproc.helper.base.BaseResponse; +import com.iconplus.smartproc.helper.model.Pagination; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class GetListDrpApprovalResponse extends BaseResponse { + + private List data; + private Pagination pagination; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/GetListDrpPengadaanResponse.java b/src/main/java/com/iconplus/smartproc/model/response/GetListDrpPengadaanResponse.java new file mode 100644 index 0000000..500132e --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/GetListDrpPengadaanResponse.java @@ -0,0 +1,19 @@ +package com.iconplus.smartproc.model.response; + +import com.iconplus.smartproc.helper.base.BaseResponse; +import com.iconplus.smartproc.helper.model.Pagination; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class GetListDrpPengadaanResponse extends BaseResponse { + private List data; + private Pagination pagination; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/GetListDrpRekomendasiResponse.java b/src/main/java/com/iconplus/smartproc/model/response/GetListDrpRekomendasiResponse.java new file mode 100644 index 0000000..3de2915 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/GetListDrpRekomendasiResponse.java @@ -0,0 +1,20 @@ +package com.iconplus.smartproc.model.response; + +import com.iconplus.smartproc.helper.base.BaseResponse; +import com.iconplus.smartproc.helper.model.Pagination; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class GetListDrpRekomendasiResponse extends BaseResponse { + + private List data; + private Pagination pagination; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/GetListDrpResponse.java b/src/main/java/com/iconplus/smartproc/model/response/GetListDrpResponse.java new file mode 100644 index 0000000..5b178d7 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/GetListDrpResponse.java @@ -0,0 +1,19 @@ +package com.iconplus.smartproc.model.response; + +import com.iconplus.smartproc.helper.base.BaseResponse; +import com.iconplus.smartproc.helper.model.Pagination; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class GetListDrpResponse extends BaseResponse { + private List data; + private Pagination pagination; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/GetListInstansiResponse.java b/src/main/java/com/iconplus/smartproc/model/response/GetListInstansiResponse.java new file mode 100644 index 0000000..4fef9e0 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/GetListInstansiResponse.java @@ -0,0 +1,20 @@ +package com.iconplus.smartproc.model.response; + +import com.iconplus.smartproc.helper.base.BaseResponse; +import com.iconplus.smartproc.helper.model.Pagination; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class GetListInstansiResponse extends BaseResponse { + + private List data; + private Pagination pagination; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/GetListJabatanResponse.java b/src/main/java/com/iconplus/smartproc/model/response/GetListJabatanResponse.java new file mode 100644 index 0000000..a778d26 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/GetListJabatanResponse.java @@ -0,0 +1,20 @@ +package com.iconplus.smartproc.model.response; + +import com.iconplus.smartproc.helper.base.BaseResponse; +import com.iconplus.smartproc.helper.model.Pagination; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class GetListJabatanResponse extends BaseResponse { + + private List data; + private Pagination pagination; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/GetListJenisAnggaranResponse.java b/src/main/java/com/iconplus/smartproc/model/response/GetListJenisAnggaranResponse.java new file mode 100644 index 0000000..7d2cf14 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/GetListJenisAnggaranResponse.java @@ -0,0 +1,20 @@ +package com.iconplus.smartproc.model.response; + +import com.iconplus.smartproc.helper.base.BaseResponse; +import com.iconplus.smartproc.helper.model.Pagination; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class GetListJenisAnggaranResponse extends BaseResponse { + + private List data; + private Pagination pagination; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/GetListJenisKontrakResponse.java b/src/main/java/com/iconplus/smartproc/model/response/GetListJenisKontrakResponse.java new file mode 100644 index 0000000..0e530af --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/GetListJenisKontrakResponse.java @@ -0,0 +1,20 @@ +package com.iconplus.smartproc.model.response; + +import com.iconplus.smartproc.helper.base.BaseResponse; +import com.iconplus.smartproc.helper.model.Pagination; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class GetListJenisKontrakResponse extends BaseResponse { + + private List data; + private Pagination pagination; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/GetListJenisPengadaanResponse.java b/src/main/java/com/iconplus/smartproc/model/response/GetListJenisPengadaanResponse.java new file mode 100644 index 0000000..22dc679 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/GetListJenisPengadaanResponse.java @@ -0,0 +1,20 @@ +package com.iconplus.smartproc.model.response; + +import com.iconplus.smartproc.helper.base.BaseResponse; +import com.iconplus.smartproc.helper.model.Pagination; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class GetListJenisPengadaanResponse extends BaseResponse { + + private List data; + private Pagination pagination; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/GetListLokasiResponse.java b/src/main/java/com/iconplus/smartproc/model/response/GetListLokasiResponse.java new file mode 100644 index 0000000..ddf4fba --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/GetListLokasiResponse.java @@ -0,0 +1,20 @@ +package com.iconplus.smartproc.model.response; + +import com.iconplus.smartproc.helper.base.BaseResponse; +import com.iconplus.smartproc.helper.model.Pagination; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class GetListLokasiResponse extends BaseResponse { + + private List data; + private Pagination pagination; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/GetListMetodePengadaanResponse.java b/src/main/java/com/iconplus/smartproc/model/response/GetListMetodePengadaanResponse.java new file mode 100644 index 0000000..8e4287c --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/GetListMetodePengadaanResponse.java @@ -0,0 +1,20 @@ +package com.iconplus.smartproc.model.response; + +import com.iconplus.smartproc.helper.base.BaseResponse; +import com.iconplus.smartproc.helper.model.Pagination; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class GetListMetodePengadaanResponse extends BaseResponse { + + private List data; + private Pagination pagination; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/GetListMetodePenyampaianResponse.java b/src/main/java/com/iconplus/smartproc/model/response/GetListMetodePenyampaianResponse.java new file mode 100644 index 0000000..58fc020 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/GetListMetodePenyampaianResponse.java @@ -0,0 +1,20 @@ +package com.iconplus.smartproc.model.response; + +import com.iconplus.smartproc.helper.base.BaseResponse; +import com.iconplus.smartproc.helper.model.Pagination; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class GetListMetodePenyampaianResponse extends BaseResponse { + + private List data; + private Pagination pagination; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/GetListPrintDrpResponse.java b/src/main/java/com/iconplus/smartproc/model/response/GetListPrintDrpResponse.java new file mode 100644 index 0000000..8465992 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/GetListPrintDrpResponse.java @@ -0,0 +1,20 @@ +package com.iconplus.smartproc.model.response; + +import com.iconplus.smartproc.helper.base.BaseResponse; +import com.iconplus.smartproc.helper.model.Pagination; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class GetListPrintDrpResponse extends BaseResponse { + + private List data; + private Pagination pagination; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/GetListStrategiPengadaanResponse.java b/src/main/java/com/iconplus/smartproc/model/response/GetListStrategiPengadaanResponse.java new file mode 100644 index 0000000..68e64a4 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/GetListStrategiPengadaanResponse.java @@ -0,0 +1,20 @@ +package com.iconplus.smartproc.model.response; + +import com.iconplus.smartproc.helper.base.BaseResponse; +import com.iconplus.smartproc.helper.model.Pagination; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class GetListStrategiPengadaanResponse extends BaseResponse { + + private List data; + private Pagination pagination; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/GetListSumberDanaResponse.java b/src/main/java/com/iconplus/smartproc/model/response/GetListSumberDanaResponse.java new file mode 100644 index 0000000..7d12fcd --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/GetListSumberDanaResponse.java @@ -0,0 +1,20 @@ +package com.iconplus.smartproc.model.response; + +import com.iconplus.smartproc.helper.base.BaseResponse; +import com.iconplus.smartproc.helper.model.Pagination; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class GetListSumberDanaResponse extends BaseResponse { + + private List data; + private Pagination pagination; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/GetListSupplyPositioningMatrixResponse.java b/src/main/java/com/iconplus/smartproc/model/response/GetListSupplyPositioningMatrixResponse.java new file mode 100644 index 0000000..ed3efb6 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/GetListSupplyPositioningMatrixResponse.java @@ -0,0 +1,20 @@ +package com.iconplus.smartproc.model.response; + +import com.iconplus.smartproc.helper.base.BaseResponse; +import com.iconplus.smartproc.helper.model.Pagination; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class GetListSupplyPositioningMatrixResponse extends BaseResponse { + + private List data; + private Pagination pagination; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/GetListUnitInisiatorResponse.java b/src/main/java/com/iconplus/smartproc/model/response/GetListUnitInisiatorResponse.java new file mode 100644 index 0000000..f765075 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/GetListUnitInisiatorResponse.java @@ -0,0 +1,21 @@ +package com.iconplus.smartproc.model.response; + +import com.iconplus.smartproc.helper.base.BaseResponse; +import com.iconplus.smartproc.helper.model.Pagination; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class GetListUnitInisiatorResponse extends BaseResponse { + + private List data; + private Pagination pagination; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/GetListUserApprovalResponse.java b/src/main/java/com/iconplus/smartproc/model/response/GetListUserApprovalResponse.java new file mode 100644 index 0000000..0664315 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/GetListUserApprovalResponse.java @@ -0,0 +1,17 @@ +package com.iconplus.smartproc.model.response; + +import com.iconplus.smartproc.helper.base.BaseResponse; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class GetListUserApprovalResponse extends BaseResponse { + private List data; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/GetRolesResponse.java b/src/main/java/com/iconplus/smartproc/model/response/GetRolesResponse.java new file mode 100644 index 0000000..5967478 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/GetRolesResponse.java @@ -0,0 +1,20 @@ +package com.iconplus.smartproc.model.response; + +import com.iconplus.smartproc.helper.base.BaseResponse; +import com.iconplus.smartproc.helper.model.Pagination; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class GetRolesResponse extends BaseResponse { + + private List data; + private Pagination pagination; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/GetUsersResponse.java b/src/main/java/com/iconplus/smartproc/model/response/GetUsersResponse.java new file mode 100644 index 0000000..6b86b9c --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/GetUsersResponse.java @@ -0,0 +1,20 @@ +package com.iconplus.smartproc.model.response; + +import com.iconplus.smartproc.helper.base.BaseResponse; +import com.iconplus.smartproc.helper.model.Pagination; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class GetUsersResponse extends BaseResponse { + + private List data; + private Pagination pagination; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/GlobalResponse.java b/src/main/java/com/iconplus/smartproc/model/response/GlobalResponse.java new file mode 100644 index 0000000..dbc31bd --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/GlobalResponse.java @@ -0,0 +1,19 @@ +package com.iconplus.smartproc.model.response; + +import com.iconplus.smartproc.helper.base.BaseResponse; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class GlobalResponse extends BaseResponse { + + private Boolean isOk; + private String message; + private transient Object data; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/InitForgotPasswordResponse.java b/src/main/java/com/iconplus/smartproc/model/response/InitForgotPasswordResponse.java new file mode 100644 index 0000000..b005be0 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/InitForgotPasswordResponse.java @@ -0,0 +1,17 @@ +package com.iconplus.smartproc.model.response; + +import com.iconplus.smartproc.helper.base.BaseResponse; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class InitForgotPasswordResponse extends BaseResponse { + + private String rememberId; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/InstansiResponse.java b/src/main/java/com/iconplus/smartproc/model/response/InstansiResponse.java new file mode 100644 index 0000000..520da30 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/InstansiResponse.java @@ -0,0 +1,21 @@ +package com.iconplus.smartproc.model.response; + +import com.iconplus.smartproc.helper.base.BaseResponse; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class InstansiResponse extends BaseResponse { + + private Long id; + private String instansi; + private String alamat; + private String keterangan; + private Boolean isActive; + private Boolean isDelete; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/JabatanResponse.java b/src/main/java/com/iconplus/smartproc/model/response/JabatanResponse.java new file mode 100644 index 0000000..d81dcd7 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/JabatanResponse.java @@ -0,0 +1,24 @@ +package com.iconplus.smartproc.model.response; + +import com.iconplus.smartproc.helper.base.BaseResponse; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class JabatanResponse extends BaseResponse { + + private Long id; + private String jabatan; + private String keterangan; + private Long instansiId; + private String instansi; + private Long bidangId; + private String bidang; + private Boolean isActive; + private Boolean isDelete; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/JenisAnggaranResponse.java b/src/main/java/com/iconplus/smartproc/model/response/JenisAnggaranResponse.java new file mode 100644 index 0000000..39cd323 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/JenisAnggaranResponse.java @@ -0,0 +1,21 @@ +package com.iconplus.smartproc.model.response; + +import com.iconplus.smartproc.helper.base.BaseResponse; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class JenisAnggaranResponse extends BaseResponse { + + private long id; + private String jenisAnggaran; + private String keterangan; + private Boolean isActive; + private Boolean isDelete; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/JenisKontrakResponse.java b/src/main/java/com/iconplus/smartproc/model/response/JenisKontrakResponse.java new file mode 100644 index 0000000..6ff9ad1 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/JenisKontrakResponse.java @@ -0,0 +1,21 @@ +package com.iconplus.smartproc.model.response; + +import com.iconplus.smartproc.helper.base.BaseResponse; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class JenisKontrakResponse extends BaseResponse { + + private Long id; + private String jenisKontrak; + private String keterangan; + private Boolean isActive; + private Boolean isDelete; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/JenisPengadaanResponse.java b/src/main/java/com/iconplus/smartproc/model/response/JenisPengadaanResponse.java new file mode 100644 index 0000000..367a31c --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/JenisPengadaanResponse.java @@ -0,0 +1,21 @@ +package com.iconplus.smartproc.model.response; + +import com.iconplus.smartproc.helper.base.BaseResponse; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class JenisPengadaanResponse extends BaseResponse { + + private Long id; + private String jenisPengadaan; + private String keterangan; + private Boolean isActive; + private Boolean isDelete; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/ListRksDaftarIsiResponse.java b/src/main/java/com/iconplus/smartproc/model/response/ListRksDaftarIsiResponse.java new file mode 100644 index 0000000..d41d1a0 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/ListRksDaftarIsiResponse.java @@ -0,0 +1,20 @@ +package com.iconplus.smartproc.model.response; + +import com.iconplus.smartproc.helper.base.BaseResponse; +import com.iconplus.smartproc.helper.model.Pagination; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class ListRksDaftarIsiResponse extends BaseResponse { + + private List data; + private Pagination pagination; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/ListRksIsiResponse.java b/src/main/java/com/iconplus/smartproc/model/response/ListRksIsiResponse.java new file mode 100644 index 0000000..fbd17d3 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/ListRksIsiResponse.java @@ -0,0 +1,20 @@ +package com.iconplus.smartproc.model.response; + +import com.iconplus.smartproc.helper.base.BaseResponse; +import com.iconplus.smartproc.helper.model.Pagination; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class ListRksIsiResponse extends BaseResponse { + + private List data; + private Pagination pagination; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/ListRksTemplateResponse.java b/src/main/java/com/iconplus/smartproc/model/response/ListRksTemplateResponse.java new file mode 100644 index 0000000..4d55ba5 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/ListRksTemplateResponse.java @@ -0,0 +1,20 @@ +package com.iconplus.smartproc.model.response; + +import com.iconplus.smartproc.helper.base.BaseResponse; +import com.iconplus.smartproc.helper.model.Pagination; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class ListRksTemplateResponse extends BaseResponse { + + private List data; + private Pagination pagination; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/LoginResponse.java b/src/main/java/com/iconplus/smartproc/model/response/LoginResponse.java new file mode 100644 index 0000000..4ad07b1 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/LoginResponse.java @@ -0,0 +1,29 @@ +package com.iconplus.smartproc.model.response; + +import com.iconplus.smartproc.helper.base.BaseResponse; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class LoginResponse extends BaseResponse { + + private Long userId; + private String accessToken; + private Integer validity; + private String refreshToken; + private String username; + private String nama; + private String telepon; + private String email; + private Long roleId; + private String role; + private List menus; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/LokasiResponse.java b/src/main/java/com/iconplus/smartproc/model/response/LokasiResponse.java new file mode 100644 index 0000000..774d422 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/LokasiResponse.java @@ -0,0 +1,21 @@ +package com.iconplus.smartproc.model.response; + +import com.iconplus.smartproc.helper.base.BaseResponse; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class LokasiResponse extends BaseResponse { + + private long id; + private String lokasi; + private String keterangan; + private Boolean isActive; + private Boolean isDelete; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/MenusPermissionResponse.java b/src/main/java/com/iconplus/smartproc/model/response/MenusPermissionResponse.java new file mode 100644 index 0000000..d378edb --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/MenusPermissionResponse.java @@ -0,0 +1,27 @@ +package com.iconplus.smartproc.model.response; + +import com.iconplus.smartproc.helper.base.BaseResponse; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class MenusPermissionResponse extends BaseResponse { + + private Long id; + private String nama; + private Long parentId; + private Long urutan; + private String icon; + private String link; + private Boolean canView; + private Boolean canRead; + private Boolean canCreate; + private Boolean canDelete; + private Boolean canUpdate; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/MenusResponse.java b/src/main/java/com/iconplus/smartproc/model/response/MenusResponse.java new file mode 100644 index 0000000..f804bab --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/MenusResponse.java @@ -0,0 +1,23 @@ +package com.iconplus.smartproc.model.response; + +import com.iconplus.smartproc.helper.base.BaseResponse; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class MenusResponse extends BaseResponse { + + private Long id; + private String text; + private String path; + private Boolean canView; + private Boolean canCreate; + private Boolean canRead; + private Boolean canDelete; + private Boolean canUpdate; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/MetodePengadaanResponse.java b/src/main/java/com/iconplus/smartproc/model/response/MetodePengadaanResponse.java new file mode 100644 index 0000000..b32cdfa --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/MetodePengadaanResponse.java @@ -0,0 +1,21 @@ +package com.iconplus.smartproc.model.response; + +import com.iconplus.smartproc.helper.base.BaseResponse; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class MetodePengadaanResponse extends BaseResponse { + + private long id; + private String metodePengadaan; + private String keterangan; + private Boolean isActive; + private Boolean isDelete; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/MetodePenyampaianResponse.java b/src/main/java/com/iconplus/smartproc/model/response/MetodePenyampaianResponse.java new file mode 100644 index 0000000..9538e96 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/MetodePenyampaianResponse.java @@ -0,0 +1,21 @@ +package com.iconplus.smartproc.model.response; + +import com.iconplus.smartproc.helper.base.BaseResponse; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class MetodePenyampaianResponse extends BaseResponse { + + private long id; + private String metodePenyampaian; + private String keterangan; + private Boolean isActive; + private Boolean isDelete; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/ParentMenusResponse.java b/src/main/java/com/iconplus/smartproc/model/response/ParentMenusResponse.java new file mode 100644 index 0000000..e4adbd6 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/ParentMenusResponse.java @@ -0,0 +1,27 @@ +package com.iconplus.smartproc.model.response; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.iconplus.smartproc.helper.base.BaseResponse; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.Transient; +import java.util.List; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class ParentMenusResponse extends BaseResponse { + + @JsonIgnore + private Long id; + + private String text; + private String icon; + private String path; + private List items; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/PermissionResponse.java b/src/main/java/com/iconplus/smartproc/model/response/PermissionResponse.java new file mode 100644 index 0000000..2a05304 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/PermissionResponse.java @@ -0,0 +1,24 @@ +package com.iconplus.smartproc.model.response; + +import com.iconplus.smartproc.helper.base.BaseResponse; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class PermissionResponse extends BaseResponse { + + private Long id; + private Long parentId; + private Long menuId; + private String menu; + private Boolean canView; + private Boolean canCreate; + private Boolean canRead; + private Boolean canDelete; + private Boolean canUpdate; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/PostAccessTokenResponse.java b/src/main/java/com/iconplus/smartproc/model/response/PostAccessTokenResponse.java new file mode 100644 index 0000000..a9c4f88 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/PostAccessTokenResponse.java @@ -0,0 +1,16 @@ +package com.iconplus.smartproc.model.response; + +import com.iconplus.smartproc.helper.base.BaseResponse; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class PostAccessTokenResponse extends BaseResponse { + + private Boolean isValid; +} \ No newline at end of file diff --git a/src/main/java/com/iconplus/smartproc/model/response/PrintDrpResponse.java b/src/main/java/com/iconplus/smartproc/model/response/PrintDrpResponse.java new file mode 100644 index 0000000..2d3b4ee --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/PrintDrpResponse.java @@ -0,0 +1,21 @@ +package com.iconplus.smartproc.model.response; + +import com.iconplus.smartproc.helper.base.BaseResponse; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.sql.Date; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class PrintDrpResponse extends BaseResponse { + + private Long id; + private Integer tahun; + private String status; + private Date printDate; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/RefreshTokenResponse.java b/src/main/java/com/iconplus/smartproc/model/response/RefreshTokenResponse.java new file mode 100644 index 0000000..3ecb322 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/RefreshTokenResponse.java @@ -0,0 +1,17 @@ +package com.iconplus.smartproc.model.response; + +import com.iconplus.smartproc.helper.base.BaseResponse; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class RefreshTokenResponse extends BaseResponse { + private String accessToken; + private String refreshToken; + private Integer validity; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/RksDaftarIsiResponse.java b/src/main/java/com/iconplus/smartproc/model/response/RksDaftarIsiResponse.java new file mode 100644 index 0000000..755a1c3 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/RksDaftarIsiResponse.java @@ -0,0 +1,22 @@ +package com.iconplus.smartproc.model.response; + +import com.iconplus.smartproc.helper.base.BaseResponse; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class RksDaftarIsiResponse extends BaseResponse { + + private Long id; + private String kodeTemplate; + private String namaTemplate; + private Long metodePengadaanId; + private String metodePengadaan; + private String versi; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/RksIsiResponse.java b/src/main/java/com/iconplus/smartproc/model/response/RksIsiResponse.java new file mode 100644 index 0000000..db72bd6 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/RksIsiResponse.java @@ -0,0 +1,25 @@ +package com.iconplus.smartproc.model.response; + +import com.iconplus.smartproc.helper.base.BaseResponse; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class RksIsiResponse extends BaseResponse { + private Long id; + private Long rksDaftarIsiId; + private String nomor; + private Integer parentId; + private String nama; + private String bab; + private String subBab; + private String urutan; + private Boolean isKontrak; + private Boolean isActive; + private Boolean isDelete; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/RksTemplateResponse.java b/src/main/java/com/iconplus/smartproc/model/response/RksTemplateResponse.java new file mode 100644 index 0000000..3a90fd1 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/RksTemplateResponse.java @@ -0,0 +1,26 @@ +package com.iconplus.smartproc.model.response; + +import com.iconplus.smartproc.helper.base.BaseResponse; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class RksTemplateResponse extends BaseResponse { + + private Long id; + private String kodeTemplate; + private String namaTemplate; + private Long metodePengadaanId; + private String metodePengadaan; + private String versi; + private Long rksDaftarIsiId; + private String daftarIsi; + private Boolean isActive; + private Boolean isDelete; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/RolesResponse.java b/src/main/java/com/iconplus/smartproc/model/response/RolesResponse.java new file mode 100644 index 0000000..158771d --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/RolesResponse.java @@ -0,0 +1,25 @@ +package com.iconplus.smartproc.model.response; + +import com.iconplus.smartproc.helper.base.BaseResponse; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class RolesResponse extends BaseResponse { + + private Long id; + private String role; + private String keterangan; + private Boolean isActive; + private Boolean isDelete; + private List permission; + + +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/StrategiPengadaanResponse.java b/src/main/java/com/iconplus/smartproc/model/response/StrategiPengadaanResponse.java new file mode 100644 index 0000000..2e43692 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/StrategiPengadaanResponse.java @@ -0,0 +1,21 @@ +package com.iconplus.smartproc.model.response; + +import com.iconplus.smartproc.helper.base.BaseResponse; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class StrategiPengadaanResponse extends BaseResponse { + + private long id; + private String strategiPengadaan; + private String keterangan; + private Boolean isActive; + private Boolean isDelete; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/SumberDanaResponse.java b/src/main/java/com/iconplus/smartproc/model/response/SumberDanaResponse.java new file mode 100644 index 0000000..6bbe13e --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/SumberDanaResponse.java @@ -0,0 +1,20 @@ +package com.iconplus.smartproc.model.response; + +import com.iconplus.smartproc.helper.base.BaseResponse; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class SumberDanaResponse extends BaseResponse { + + private Long id; + private String sumberDana; + private String keterangan; + private Boolean isActive; + private Boolean isDelete; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/SupplyPositioningMatrixResponse.java b/src/main/java/com/iconplus/smartproc/model/response/SupplyPositioningMatrixResponse.java new file mode 100644 index 0000000..4f0dd29 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/SupplyPositioningMatrixResponse.java @@ -0,0 +1,21 @@ +package com.iconplus.smartproc.model.response; + +import com.iconplus.smartproc.helper.base.BaseResponse; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SupplyPositioningMatrixResponse extends BaseResponse { + + private long id; + private String supplyPositioningMatrix; + private String keterangan; + private Boolean isActive; + private Boolean isDelete; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/UnitInisiatorResponse.java b/src/main/java/com/iconplus/smartproc/model/response/UnitInisiatorResponse.java new file mode 100644 index 0000000..4b722ef --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/UnitInisiatorResponse.java @@ -0,0 +1,19 @@ +package com.iconplus.smartproc.model.response; + +import com.iconplus.smartproc.helper.base.BaseResponse; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class UnitInisiatorResponse extends BaseResponse { + private Long id; + private String unitInisiator; + private String keterangan; + private Boolean isActive; + private Boolean isDelete; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/UserApprovalResponse.java b/src/main/java/com/iconplus/smartproc/model/response/UserApprovalResponse.java new file mode 100644 index 0000000..4265461 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/UserApprovalResponse.java @@ -0,0 +1,19 @@ +package com.iconplus.smartproc.model.response; + +import com.iconplus.smartproc.helper.base.BaseResponse; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class UserApprovalResponse extends BaseResponse { + + private Long id; + private String nama; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/UsersResponse.java b/src/main/java/com/iconplus/smartproc/model/response/UsersResponse.java new file mode 100644 index 0000000..7bbfd57 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/UsersResponse.java @@ -0,0 +1,34 @@ +package com.iconplus.smartproc.model.response; + +import com.iconplus.smartproc.helper.base.BaseResponse; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class UsersResponse extends BaseResponse { + private Long id; + private String nama; + private String username; + + private Long jabatanId; + private String jabatan; + + private Long instansiId; + private String instansi; + + private Long bidangId; + private String bidang; + + private Long roleId; + private String role; + + private String email; + private String telepon; + private Boolean isActive; + private Boolean isDelete; +} diff --git a/src/main/java/com/iconplus/smartproc/model/token/TokenContent.java b/src/main/java/com/iconplus/smartproc/model/token/TokenContent.java new file mode 100644 index 0000000..1cf3b34 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/token/TokenContent.java @@ -0,0 +1,23 @@ +package com.iconplus.smartproc.model.token; + +import lombok.Builder; +import lombok.Data; + +import java.util.Set; + +@Builder +@Data +public class TokenContent { + private Long userId; + private String nama; + private String username; + private Long roleId; + private String role; + private Long instansiId; + private String instansi; + private Long bidangId; + private String bidang; + private Long jabatanId; + private String jabatan; + private Set accessMenu; +} diff --git a/src/main/java/com/iconplus/smartproc/repository/BidangRepository.java b/src/main/java/com/iconplus/smartproc/repository/BidangRepository.java new file mode 100644 index 0000000..66bb769 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/repository/BidangRepository.java @@ -0,0 +1,32 @@ +package com.iconplus.smartproc.repository; + +import com.iconplus.smartproc.model.entity.Bidang; +import com.iconplus.smartproc.model.projection.BidangView; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +@Repository +public interface BidangRepository extends JpaRepository { + + @Query(value = "SELECT b.id as id, " + + "b.instansiId as instansiId, " + + "i.instansi as instansi, " + + "b.bidang as bidang, " + + "b.keterangan as keterangan, " + + "b.isActive as isActive " + + "FROM Bidang b " + + "JOIN Instansi i on i.id = b.instansiId " + + "WHERE b.isDelete = false " + + "AND (:search='' or UPPER(b.bidang) like :search) " + + "ORDER BY b.id") + Page getListBidang(String search, Pageable pageable); + + Optional findByIdAndIsDeleteFalse(Long id); + + Optional findByBidangAndIsDeleteFalse(String bidang); +} diff --git a/src/main/java/com/iconplus/smartproc/repository/DrpApprovalHistoryRepository.java b/src/main/java/com/iconplus/smartproc/repository/DrpApprovalHistoryRepository.java new file mode 100644 index 0000000..f3afa55 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/repository/DrpApprovalHistoryRepository.java @@ -0,0 +1,27 @@ +package com.iconplus.smartproc.repository; + +import com.iconplus.smartproc.model.entity.DrpApprovalHistory; +import com.iconplus.smartproc.model.projection.DrpApprovalHistoryView; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface DrpApprovalHistoryRepository extends JpaRepository { + + @Query(value = "SELECT dah.status as status, " + + "dah.date as date, " + + "da.catatan as catatan, " + + "u.nama as nama, " + + "j.jabatan as jabatan " + + "FROM DrpApprovalHistory dah " + + "JOIN DrpApproval da ON da.id = dah.drpApprovalId " + + "JOIN Users u ON u.id = da.approverUserId " + + "JOIN Jabatan j ON j.id = u.jabatanId " + + "WHERE da.drpId = :drpId " + + "ORDER BY dah.timeCreated desc") + List getRiwayatApprovalByDrpId(Long drpId); + +} diff --git a/src/main/java/com/iconplus/smartproc/repository/DrpApprovalRepository.java b/src/main/java/com/iconplus/smartproc/repository/DrpApprovalRepository.java new file mode 100644 index 0000000..7e28e22 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/repository/DrpApprovalRepository.java @@ -0,0 +1,52 @@ +package com.iconplus.smartproc.repository; + +import com.iconplus.smartproc.model.entity.DrpApproval; +import com.iconplus.smartproc.model.projection.DrpApprovalView; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Optional; + +@Repository +public interface DrpApprovalRepository extends JpaRepository { + + Optional findByDrpIdAndApproverUserIdAndIsDeleteFalse(Long drpId, Long userId); + + + @Query(value = "SELECT da " + + "FROM DrpApproval da " + + "WHERE da.isDelete = false " + + "AND da.drpId = :drpId " + + "AND UPPER(da.level) = 'KOMITE' " + + "AND da.isApprove = null") + List getListKomiteApproval(Long drpId); + + + List findByDrpIdAndIsDeleteFalse(Long drpId); + + @Query(value = "SELECT da.drpId as drpId, " + + "da.approverUserId as approverUserId, " + + "u.nama as nama, " + + "j.jabatan as jabatan " + + "FROM DrpApproval da " + + "JOIN Users u ON u.id = da.approverUserId " + + "JOIN Jabatan j ON j.id = u.jabatanId " + + "WHERE da.isDelete = false " + + "AND da.drpId = :drpId " + + "AND da.isApprove = true " + + "ORDER BY da.level desc") + List getDrpApproval(Long drpId); + + Optional findByDrpIdAndLevelAndIsDeleteFalse(Long drpId, String level); + + @Query(value = "UPDATE drp_approval " + + "SET is_delete = 1 " + + "WHERE drp_id = :drpId " + + "AND is_delete = 0", nativeQuery = true) + void deleteApprovalByDrpId(Long drpId); + + + +} diff --git a/src/main/java/com/iconplus/smartproc/repository/DrpDokumenRepository.java b/src/main/java/com/iconplus/smartproc/repository/DrpDokumenRepository.java new file mode 100644 index 0000000..fe3e208 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/repository/DrpDokumenRepository.java @@ -0,0 +1,16 @@ +package com.iconplus.smartproc.repository; + +import com.iconplus.smartproc.model.entity.DrpDokumen; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Optional; + +@Repository +public interface DrpDokumenRepository extends JpaRepository { + + List findByDrpIdAndIsDeleteFalse(Long drpId); + + Optional findByFilenameAndIsDeleteFalse(String filename); +} diff --git a/src/main/java/com/iconplus/smartproc/repository/DrpPengadaanDokumenRepository.java b/src/main/java/com/iconplus/smartproc/repository/DrpPengadaanDokumenRepository.java new file mode 100644 index 0000000..bcf8b99 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/repository/DrpPengadaanDokumenRepository.java @@ -0,0 +1,19 @@ +package com.iconplus.smartproc.repository; + +import com.iconplus.smartproc.model.entity.DrpPengadaanDokumen; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Optional; + +@Repository +public interface DrpPengadaanDokumenRepository extends JpaRepository { + + List findByDrpIdAndIsDeleteFalse(Long drpId); + + Optional findByFilenameAndIsDeleteFalse(String filename); + + List findByDrpPengadaanIdAndIsDeleteFalse(Long id); + +} diff --git a/src/main/java/com/iconplus/smartproc/repository/DrpPengadaanRepository.java b/src/main/java/com/iconplus/smartproc/repository/DrpPengadaanRepository.java new file mode 100644 index 0000000..df816a1 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/repository/DrpPengadaanRepository.java @@ -0,0 +1,102 @@ +package com.iconplus.smartproc.repository; + +import com.iconplus.smartproc.model.entity.DrpPengadaan; +import com.iconplus.smartproc.model.projection.DrpPengadaanView; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +@Repository +public interface DrpPengadaanRepository extends JpaRepository { + + @Query(value = "SELECT dp.id as id, " + + "dp.nomor as nomor, " + + "dp.drpId as drpId, " + + "dp.namaPengadaan as namaPengadaan, " + + "dp.hpe as hpe, " + + "dp.pagu as pagu, " + + "dp.isActive as isActive, " + + "dp.rencanaTanggal as rencanaTanggal, " + + "dp.targetTanggal as targetTanggal, " + + "dp.jenisKontrakId as jenisKontrakId, " + + "jk.jenisKontrak as jenisKontrak, " + + "dp.jenisPengadaanId as jenisPengadaanId, " + + "jp.jenisPengadaan as jenisPengadaan, " + + "dp.lokasiId as lokasiId, " + + "l.lokasi as lokasi, " + + "dp.metodePengadaanId as metodePengadaanId, " + + "mp.metodePengadaan as metodePengadaan, " + + "dp.metodePenyampaianId as metodePenyampaianId, " + + "mpi.metodePenyampaian as metodePenyampaian, " + + "dp.strategiPengadaanId as strategiPengadaanId, " + + "sp.strategiPengadaan as strategiPengadaan, " + + "dp.sumberDanaId as sumberDanaId, " + + "sd.sumberDana as sumberDana, " + + "dp.supplyPositioningMatrixId as supplyPositioningMatrixId, " + + "spm.supplyPositioningMatrix as supplyPositioningMatrix, " + + "dp.unitInisiatorId as unitInisiatorId, " + + "ui.unitInisiator as unitInisiator " + + "FROM DrpPengadaan dp " + + "JOIN JenisKontrak jk ON jk.id = dp.jenisKontrakId " + + "JOIN JenisPengadaan jp ON jp.id = dp.jenisPengadaanId " + + "JOIN Lokasi l ON l.id = dp.lokasiId " + + "JOIN MetodePengadaan mp ON mp.id = dp.metodePengadaanId " + + "JOIN MetodePenyampaian mpi ON mpi.id = dp.metodePenyampaianId " + + "JOIN StrategiPengadaan sp ON sp.id = dp.strategiPengadaanId " + + "JOIN SumberDana sd ON sd.id = dp.sumberDanaId " + + "JOIN SupplyPositioningMatrix spm ON spm.id = dp.supplyPositioningMatrixId " + + "JOIN UnitInisiator ui ON ui.id = dp.unitInisiatorId " + + "WHERE dp.isDelete = false " + + "AND dp.drpId = :drpId " + + "ORDER BY dp.id") + Page getListDrpPengadaan(Long drpId, Pageable pageable); + + @Query(value = "SELECT dp.id as id, " + + "dp.nomor as nomor, " + + "dp.drpId as drpId, " + + "dp.namaPengadaan as namaPengadaan, " + + "dp.hpe as hpe, " + + "dp.pagu as pagu, " + + "dp.isActive as isActive, " + + "dp.rencanaTanggal as rencanaTanggal, " + + "dp.targetTanggal as targetTanggal, " + + "dp.jenisKontrakId as jenisKontrakId, " + + "jk.jenisKontrak as jenisKontrak, " + + "dp.jenisPengadaanId as jenisPengadaanId, " + + "jp.jenisPengadaan as jenisPengadaan, " + + "dp.lokasiId as lokasiId, " + + "l.lokasi as lokasi, " + + "dp.metodePengadaanId as metodePengadaanId, " + + "mp.metodePengadaan as metodePengadaan, " + + "dp.metodePenyampaianId as metodePenyampaianId, " + + "mpi.metodePenyampaian as metodePenyampaian, " + + "dp.strategiPengadaanId as strategiPengadaanId, " + + "sp.strategiPengadaan as strategiPengadaan, " + + "dp.sumberDanaId as sumberDanaId, " + + "sd.sumberDana as sumberDana, " + + "dp.supplyPositioningMatrixId as supplyPositioningMatrixId, " + + "spm.supplyPositioningMatrix as supplyPositioningMatrix, " + + "dp.unitInisiatorId as unitInisiatorId, " + + "ui.unitInisiator as unitInisiator " + + "FROM DrpPengadaan dp " + + "JOIN JenisKontrak jk ON jk.id = dp.jenisKontrakId " + + "JOIN JenisPengadaan jp ON jp.id = dp.jenisPengadaanId " + + "JOIN Lokasi l ON l.id = dp.lokasiId " + + "JOIN MetodePengadaan mp ON mp.id = dp.metodePengadaanId " + + "JOIN MetodePenyampaian mpi ON mpi.id = dp.metodePenyampaianId " + + "JOIN StrategiPengadaan sp ON sp.id = dp.strategiPengadaanId " + + "JOIN SumberDana sd ON sd.id = dp.sumberDanaId " + + "JOIN SupplyPositioningMatrix spm ON spm.id = dp.supplyPositioningMatrixId " + + "JOIN UnitInisiator ui ON ui.id = dp.unitInisiatorId " + + "WHERE dp.isDelete = false " + + "AND dp.id = :id") + Optional getDrpPengadaanById(Long id); + + Optional findByIdAndIsDeleteFalse(Long id); + + +} diff --git a/src/main/java/com/iconplus/smartproc/repository/DrpRekomendasiRepository.java b/src/main/java/com/iconplus/smartproc/repository/DrpRekomendasiRepository.java new file mode 100644 index 0000000..49ed28d --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/repository/DrpRekomendasiRepository.java @@ -0,0 +1,58 @@ +package com.iconplus.smartproc.repository; + +import com.iconplus.smartproc.model.entity.DrpRekomendasi; +import com.iconplus.smartproc.model.projection.DrpRekomendasiView; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface DrpRekomendasiRepository extends JpaRepository { + + @Query(value = "SELECT dr.id as id, " + + "da.isApprove as isApprove, " + + "j.jabatan as jabatan, " + + "dr.rekomendasi as rekomendasi, " + + "dr.rekomendasiDate as rekomendasiDate " + + "FROM DrpRekomendasi dr " + + "JOIN DrpApproval da ON da.id = dr.drpApprovalId " + + "JOIN Users u ON u.id = dr.userId " + + "JOIN Jabatan j ON j.id = u.jabatanId " + + "WHERE dr.isDelete = false " + + "AND dr.jenisPengadaanId = :jenisPengadaanId") + List getListDrpRekomendasi(Long jenisPengadaanId); + + @Query(value = "SELECT dr.id as id, " + + "da.isApprove as isApprove, " + + "j.jabatan as jabatan, " + + "dr.rekomendasi as rekomendasi, " + + "dr.rekomendasiDate as rekomendasiDate " + + "FROM DrpRekomendasi dr " + + "JOIN DrpApproval da ON da.id = dr.drpApprovalId " + + "JOIN Users u ON u.id = dr.userId " + + "JOIN Jabatan j ON j.id = u.jabatanId " + + "WHERE dr.isDelete = false " + + "AND dr.jenisPengadaanId = :jenisPengadaanId") + Page getListDrpRekomendasi(Long jenisPengadaanId, Pageable pageable); + + @Query(value = "SELECT dr.id as id, " + + "dp.nomor as nomor, " + + "dp.namaPengadaan as namaPengadaan, " + + "da.isApprove as isApprove, " + + "da.level as level, " + + "j.jabatan as jabatan, " + + "dr.rekomendasi as rekomendasi, " + + "dr.rekomendasiDate as rekomendasiDate " + + "FROM DrpRekomendasi dr " + + "JOIN DrpApproval da ON da.id = dr.drpApprovalId " + + "JOIN Users u ON u.id = dr.userId " + + "JOIN Jabatan j ON j.id = u.jabatanId " + + "JOIN DrpPengadaan dp ON dp.id = dr.jenisPengadaanId " + + "WHERE dr.isDelete = false " + + "AND dr.drpId = :drpId") + Page getListDrpRekomendasiByDrpId(Long drpId, Pageable pageable); +} diff --git a/src/main/java/com/iconplus/smartproc/repository/DrpRepository.java b/src/main/java/com/iconplus/smartproc/repository/DrpRepository.java new file mode 100644 index 0000000..fc0f1d9 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/repository/DrpRepository.java @@ -0,0 +1,60 @@ +package com.iconplus.smartproc.repository; + +import com.iconplus.smartproc.model.entity.Drp; +import com.iconplus.smartproc.model.projection.DrpApprovalView; +import com.iconplus.smartproc.model.projection.DrpView; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; + +import java.sql.Timestamp; +import java.util.List; +import java.util.Optional; + +@Repository +public interface DrpRepository extends JpaRepository { + + Optional findByIdAndIsDeleteFalse(Long id); + + Optional findByTahunAndIsDeleteFalse(Integer tahun); + + @Query(value = "SELECT d.id as id, " + + "d.tahun as tahun, " + + "d.approveStatus as approveStatus, " + + "d.approveDate as approveDate, " + + "d.isActive as isActive, " + + "d.isDelete as isDelete, " + + "count(dp.drpId) as totalPengadaan " + + "FROM Drp d " + + "LEFT JOIN DrpPengadaan dp ON dp.drpId = d.id " + + "WHERE d.isDelete = false " + + "GROUP BY d.id " + + "ORDER BY d.id") + Page findByIsDeleteFalse(Timestamp approveDate, + Pageable pageable); + + Page findByIsDeleteFalse(Pageable pageable); + + @Query(value = "SELECT d.id as id, " + + "d.tahun as tahun, " + + "d.approveStatus as approveStatus, " + + "d.vpApproveDate as vpApproveDate, " + + "d.komiteApproveDate as komiteApproveDate, " + + "d.direkturApproveDate as direkturApproveDate " + + "FROM Drp d " + + "WHERE d.isDelete = false") + Page getListApprovalDrp(Pageable pageable); + + + + @Query(value = "SELECT d.id as id, " + + "d.tahun as tahun, " + + "d.isPrint as isPrint, " + + "d.printDate as printDate " + + "FROM Drp d " + + "WHERE d.isDelete = false") + Page getListPrintDrp(Pageable pageable); + +} diff --git a/src/main/java/com/iconplus/smartproc/repository/InstansiRepository.java b/src/main/java/com/iconplus/smartproc/repository/InstansiRepository.java new file mode 100644 index 0000000..ded6024 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/repository/InstansiRepository.java @@ -0,0 +1,30 @@ +package com.iconplus.smartproc.repository; + +import com.iconplus.smartproc.model.entity.Instansi; +import com.iconplus.smartproc.model.projection.InstansiView; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +@Repository +public interface InstansiRepository extends JpaRepository { + + @Query(value = "SELECT i.id as id," + + "i.instansi as instansi, " + + "i.alamat as alamat, " + + "i.keterangan as keterangan, " + + "i.isActive as isActive, " + + "i.isDelete as isDelete " + + "FROM Instansi i " + + "WHERE i.isDelete = false " + + "AND (:search = '' or UPPER(i.instansi) like :search)") + Page getListInstansi(String search, Pageable pageable); + + Optional findByIdAndIsDeleteFalse(Long id); + + Optional findByInstansiAndIsDeleteFalse(String instansi); +} diff --git a/src/main/java/com/iconplus/smartproc/repository/JabatanRepository.java b/src/main/java/com/iconplus/smartproc/repository/JabatanRepository.java new file mode 100644 index 0000000..a0b7aa6 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/repository/JabatanRepository.java @@ -0,0 +1,52 @@ +package com.iconplus.smartproc.repository; + +import com.iconplus.smartproc.model.entity.Jabatan; +import com.iconplus.smartproc.model.projection.JabatanView; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +@Repository +public interface JabatanRepository extends JpaRepository { + + Optional findByIdAndIsDeleteFalse(Long id); + + Optional findByJabatanAndIsDeleteFalse(String jabatan); + + @Query(value = "SELECT j.id as id, " + + "j.jabatan as jabatan, " + + "j.instansiId as instansiId, " + + "j.keterangan as keterangan, " + + "i.instansi as instansi, " + + "j.bidangId as bidangId, " + + "b.bidang as bidang, " + + "j.isActive as isActive, " + + "j.isDelete as isDelete " + + "FROM Jabatan j " + + "JOIN Bidang b ON b.id = j.bidangId " + + "JOIN Instansi i ON i.id = j.instansiId " + + "WHERE j.isDelete = false " + + "AND j.id = :jabatanId") + Optional getJabatanDetails(Long jabatanId); + + @Query(value = "SELECT j.id as id, " + + "j.jabatan as jabatan, " + + "j.keterangan as keterangan, " + + "j.instansiId as instansiId, " + + "i.instansi as instansi, " + + "j.bidangId as bidangId, " + + "b.bidang as bidang, " + + "j.isActive as isActive, " + + "j.isDelete as isDelete " + + "FROM Jabatan j " + + "JOIN Bidang b ON b.id = j.bidangId " + + "JOIN Instansi i ON i.id = j.instansiId " + + "WHERE j.isDelete = false " + + "AND (:search = '' or UPPER(j.jabatan) like :search) " + + "ORDER BY j.id") + Page getListJabatan(String search, Pageable pageable); +} diff --git a/src/main/java/com/iconplus/smartproc/repository/JenisAnggaranRepository.java b/src/main/java/com/iconplus/smartproc/repository/JenisAnggaranRepository.java new file mode 100644 index 0000000..a25164b --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/repository/JenisAnggaranRepository.java @@ -0,0 +1,31 @@ +package com.iconplus.smartproc.repository; + +import com.iconplus.smartproc.model.entity.JenisAnggaran; +import com.iconplus.smartproc.model.projection.JenisAnggaranView; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +@Repository +public interface JenisAnggaranRepository extends JpaRepository { + + @Query(value = "SELECT ja.id as id, " + + "ja.jenisAnggaran as jenisAnggaran, " + + "ja.keterangan as keterangan, " + + "ja.isDelete as isDelete " + + "FROM JenisAnggaran ja " + + "WHERE ja.isDelete = false " + + "AND (:search = '' " + + "or (UPPER(ja.jenisAnggaran) like :search OR UPPER(ja.keterangan) like :search)) " + + "ORDER BY ja.id") + Page getAllJenisAnggaran(String search, Pageable pageable); + + Optional findByIdAndIsDeleteFalse(Long id); + + Optional findByJenisAnggaranAndIsDeleteFalse(String jenisAnggaran); + +} diff --git a/src/main/java/com/iconplus/smartproc/repository/JenisKontrakRepository.java b/src/main/java/com/iconplus/smartproc/repository/JenisKontrakRepository.java new file mode 100644 index 0000000..187e656 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/repository/JenisKontrakRepository.java @@ -0,0 +1,32 @@ +package com.iconplus.smartproc.repository; + +import com.iconplus.smartproc.model.entity.JenisKontrak; +import com.iconplus.smartproc.model.projection.JenisKontrakView; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +@Repository +public interface JenisKontrakRepository extends JpaRepository { + + @Query(value = "SELECT jk.id as id, " + + "jk.jenisKontrak as jenisKontrak, " + + "jk.keterangan as keterangan, " + + "jk.isActive as isActive, " + + "jk.isDelete as isDelete " + + "FROM JenisKontrak jk " + + "WHERE jk.isDelete = false " + + "AND (:search is '' " + + "or UPPER(jk.jenisKontrak) like :search) " + + "ORDER BY jk.id") + Page getAllJenisKontrak(String search, Pageable pageable); + + Optional findByIdAndIsDeleteFalse(Long id); + + Optional findByJenisKontrakAndIsDeleteFalse(String jenisKontrak); + +} \ No newline at end of file diff --git a/src/main/java/com/iconplus/smartproc/repository/JenisPengadaanRepository.java b/src/main/java/com/iconplus/smartproc/repository/JenisPengadaanRepository.java new file mode 100644 index 0000000..79cd333 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/repository/JenisPengadaanRepository.java @@ -0,0 +1,29 @@ +package com.iconplus.smartproc.repository; + +import com.iconplus.smartproc.model.entity.JenisPengadaan; +import com.iconplus.smartproc.model.projection.JenisPengadaanView; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +@Repository +public interface JenisPengadaanRepository extends JpaRepository { + + Optional findByIdAndIsDeleteFalse(Long id); + Optional findByJenisPengadaanAndIsDeleteFalse(String jenisPengadaan); + + @Query(value = "SELECT jp.id as id, " + + "jp.jenisPengadaan as jenisPengadaan, " + + "jp.keterangan as keterangan, " + + "jp.isActive as isActive " + + "FROM JenisPengadaan jp " + + "WHERE jp.isDelete = false " + + "AND (:search='' OR UPPER(jp.jenisPengadaan) like :search) " + + "ORDER BY jp.id") + Page getListJenisPengadaan(String search, Pageable pageable); + +} \ No newline at end of file diff --git a/src/main/java/com/iconplus/smartproc/repository/JenisanggaranRepository.java b/src/main/java/com/iconplus/smartproc/repository/JenisanggaranRepository.java deleted file mode 100644 index 3ccdc51..0000000 --- a/src/main/java/com/iconplus/smartproc/repository/JenisanggaranRepository.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.iconplus.smartproc.repository; - -import com.iconplus.smartproc.entity.Jenisanggaran; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface JenisanggaranRepository extends JpaRepository { - -} diff --git a/src/main/java/com/iconplus/smartproc/repository/JeniskontrakRepository.java b/src/main/java/com/iconplus/smartproc/repository/JeniskontrakRepository.java deleted file mode 100644 index 5d82ff8..0000000 --- a/src/main/java/com/iconplus/smartproc/repository/JeniskontrakRepository.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.iconplus.smartproc.repository; - -import com.iconplus.smartproc.entity.Jeniskontrak; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface JeniskontrakRepository extends JpaRepository { - -} diff --git a/src/main/java/com/iconplus/smartproc/repository/JenispengadaanRepository.java b/src/main/java/com/iconplus/smartproc/repository/JenispengadaanRepository.java deleted file mode 100644 index bf31075..0000000 --- a/src/main/java/com/iconplus/smartproc/repository/JenispengadaanRepository.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.iconplus.smartproc.repository; - -import com.iconplus.smartproc.entity.Jenispengadaan; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface JenispengadaanRepository extends JpaRepository { - -} \ No newline at end of file diff --git a/src/main/java/com/iconplus/smartproc/repository/LokasiRepository.java b/src/main/java/com/iconplus/smartproc/repository/LokasiRepository.java index f2696e8..b48a040 100644 --- a/src/main/java/com/iconplus/smartproc/repository/LokasiRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/LokasiRepository.java @@ -1,10 +1,32 @@ package com.iconplus.smartproc.repository; -import com.iconplus.smartproc.entity.Lokasi; +import com.iconplus.smartproc.model.entity.Lokasi; +import com.iconplus.smartproc.model.projection.LokasiView; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; +import java.util.Optional; + @Repository public interface LokasiRepository extends JpaRepository { + + @Query(value = "SELECT l.id as id, " + + "l.lokasi as lokasi, " + + "l.keterangan as keterangan, " + + "l.isActive as isActive, " + + "l.isDelete as isDelete " + + "FROM Lokasi l " + + "WHERE l.isDelete = false " + + "AND (:search = '' " + + "or UPPER(l.lokasi) like :search) " + + "ORDER BY l.id") + Page getAllLokasi(String search, Pageable pageable); + + Optional findByIdAndIsDeleteFalse(Long id); + + Optional findByLokasiAndIsDeleteFalse(String lokasi); } diff --git a/src/main/java/com/iconplus/smartproc/repository/MenusRepository.java b/src/main/java/com/iconplus/smartproc/repository/MenusRepository.java new file mode 100644 index 0000000..f8fc105 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/repository/MenusRepository.java @@ -0,0 +1,38 @@ +package com.iconplus.smartproc.repository; + +import com.iconplus.smartproc.model.entity.Menus; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; + +import java.awt.*; +import java.util.List; +import java.util.Optional; + +@Repository +public interface MenusRepository extends JpaRepository { + + List findByIsDeleteFalse(); + Optional findByIdAndIsDeleteFalse(Long id); + + @Query(value = "SELECT m " + + "FROM Menus m " + + "JOIN Permission p ON p.menuId = m.id " + + "WHERE m.parentId = 0 " + + "AND m.isDelete = false " + + "AND p.roleId = :roleId " + + "ORDER BY m.urutan") + List findAllParentMenu(Long roleId); + + + @Query(value = "SELECT m " + + "FROM Menus m " + + "ORDER BY m.parentId, m.urutan") + List findAllOrderByParentAndUrutan(); + + @Query(value = "SELECT m " + + "FROM Menus m " + + "WHERE m.isDelete = false ") + List findAllMenus(); + +} diff --git a/src/main/java/com/iconplus/smartproc/repository/MetodePengadaanRepository.java b/src/main/java/com/iconplus/smartproc/repository/MetodePengadaanRepository.java new file mode 100644 index 0000000..b8a18aa --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/repository/MetodePengadaanRepository.java @@ -0,0 +1,32 @@ +package com.iconplus.smartproc.repository; + +import com.iconplus.smartproc.model.entity.MetodePengadaan; +import com.iconplus.smartproc.model.projection.MetodePengadaanView; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +@Repository +public interface MetodePengadaanRepository extends JpaRepository { + + @Query(value = "SELECT mp.id as id, " + + "mp.metodePengadaan as metodePengadaan, " + + "mp.keterangan as keterangan, " + + "mp.isActive as isActive, " + + "mp.isDelete as isDelete " + + "FROM MetodePengadaan mp " + + "WHERE mp.isDelete = false " + + "AND (:search = '' " + + "or UPPER(mp.metodePengadaan) like :search) " + + "ORDER BY mp.id") + Page getAllMetodePengadaan(String search, Pageable pageable); + + Optional findByIdAndIsDeleteFalse(Long id); + + Optional findByMetodePengadaanAndIsDeleteFalse(String metodePengadaan); + +} diff --git a/src/main/java/com/iconplus/smartproc/repository/MetodePenyampaianRepository.java b/src/main/java/com/iconplus/smartproc/repository/MetodePenyampaianRepository.java new file mode 100644 index 0000000..2c4f633 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/repository/MetodePenyampaianRepository.java @@ -0,0 +1,32 @@ +package com.iconplus.smartproc.repository; + +import com.iconplus.smartproc.model.entity.MetodePenyampaian; +import com.iconplus.smartproc.model.projection.MetodePenyampaianView; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +@Repository +public interface MetodePenyampaianRepository extends JpaRepository { + + @Query(value = "SELECT mp.id as id, " + + "mp.metodePenyampaian as metodePenyampaian, " + + "mp.keterangan as keterangan, " + + "mp.isActive as isActive, " + + "mp.isDelete as isDelete " + + "FROM MetodePenyampaian mp " + + "WHERE mp.isDelete = false " + + "AND (:search = '' " + + "or UPPER(mp.metodePenyampaian) like :search) " + + "ORDER BY mp.id") + Page getAllMetodePenyampaian(String search, Pageable pageable); + + Optional findByIdAndIsDeleteFalse(Long id); + + Optional findByMetodePenyampaianAndIsDeleteFalse(String metodePenyampaian); + +} diff --git a/src/main/java/com/iconplus/smartproc/repository/MetodepengadaanRepository.java b/src/main/java/com/iconplus/smartproc/repository/MetodepengadaanRepository.java deleted file mode 100644 index d91d85f..0000000 --- a/src/main/java/com/iconplus/smartproc/repository/MetodepengadaanRepository.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.iconplus.smartproc.repository; - -import com.iconplus.smartproc.entity.Metodepengadaan; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface MetodepengadaanRepository extends JpaRepository { - -} diff --git a/src/main/java/com/iconplus/smartproc/repository/MetodepenyampaianRepository.java b/src/main/java/com/iconplus/smartproc/repository/MetodepenyampaianRepository.java deleted file mode 100644 index b3b89ad..0000000 --- a/src/main/java/com/iconplus/smartproc/repository/MetodepenyampaianRepository.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.iconplus.smartproc.repository; - -import com.iconplus.smartproc.entity.Metodepenyampaian; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface MetodepenyampaianRepository extends JpaRepository { - -} diff --git a/src/main/java/com/iconplus/smartproc/repository/PermissionRepository.java b/src/main/java/com/iconplus/smartproc/repository/PermissionRepository.java new file mode 100644 index 0000000..814385b --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/repository/PermissionRepository.java @@ -0,0 +1,51 @@ +package com.iconplus.smartproc.repository; + +import com.iconplus.smartproc.model.entity.Permission; +import com.iconplus.smartproc.model.projection.MenusPermissionView; +import com.iconplus.smartproc.model.projection.PermissionView; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Optional; + +@Repository +public interface PermissionRepository extends JpaRepository { + + @Query(value = "SELECT m.parentId as parentId, " + + "p.menuId as menuId, " + + "m.nama as nama, " + + "p.canView as canView, " + + "p.canCreate as canCreate, " + + "p.canUpdate as canUpdate, " + + "p.canDelete as canDelete, " + + "p.canRead as canRead " + + "FROM Permission p " + + "JOIN Menus m ON m.id = p.menuId " + + "WHERE p.isDelete = false " + + "AND m.isDelete = false " + + "AND p.roleId = :roleId") + List getAllPermissionsByRoleId(Long roleId); + + Optional findByRoleIdAndMenuIdAndIsDeleteFalse(Long roleId, Long menuId); + + @Query(value = "SELECT m.id as id, " + + "m.nama as nama, " + + "m.parentId as parentId, " + + "m.urutan as urutan, " + + "m.icon as icon, " + + "m.link as link, " + + "p.canView as canView, " + + "p.canRead as canRead, " + + "p.canCreate as canCreate, " + + "p.canUpdate as canUpdate, " + + "p.canDelete as canDelete " + + "FROM Permission p " + + "JOIN Menus m ON m.id = p.menuId " + + "WHERE m.isDelete = false " + + "AND p.isDelete = false " + + "AND p.roleId = :roleId " + + "ORDER BY m.parentId, m.urutan") + List getListMenusPermission(Long roleId); +} diff --git a/src/main/java/com/iconplus/smartproc/repository/RksDaftarIsiRepository.java b/src/main/java/com/iconplus/smartproc/repository/RksDaftarIsiRepository.java new file mode 100644 index 0000000..8c57c20 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/repository/RksDaftarIsiRepository.java @@ -0,0 +1,31 @@ +package com.iconplus.smartproc.repository; + +import com.iconplus.smartproc.model.entity.RksDaftarIsi; +import com.iconplus.smartproc.model.projection.RksDaftarIsiView; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +@Repository +public interface RksDaftarIsiRepository extends JpaRepository { + + @Query(value = "SELECT rki.id as id, " + + "rki.kodeTemplate as kodeTemplate, " + + "rki.namaTemplate as namaTemplate, " + + "rki.metodePengadaanId as metodePengadaanId, " + + "mp.metodePengadaan as metodePengadaan " + + "FROM RksDaftarIsi rki " + + "JOIN MetodePengadaan mp ON mp.id = rki.metodePengadaanId " + + "WHERE rki.isDelete = false " + + "ORDER BY rki.kodeTemplate") + Page getListRksDaftarIsi(Pageable pageable); + + Optional findByKodeTemplateAndIsDeleteFalse(String kodeTemplate); + + Optional findByIdAndIsDeleteFalse(Long id); + +} diff --git a/src/main/java/com/iconplus/smartproc/repository/RksIsiRepository.java b/src/main/java/com/iconplus/smartproc/repository/RksIsiRepository.java new file mode 100644 index 0000000..7e06351 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/repository/RksIsiRepository.java @@ -0,0 +1,22 @@ +package com.iconplus.smartproc.repository; + +import com.iconplus.smartproc.model.entity.RksIsi; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.stereotype.Repository; + +@Repository +public interface RksIsiRepository extends JpaRepository { + + Page findByRksDaftarIsiIdAndIsDeleteFalse(Long rksDaftarIsiId, Pageable pageable); + + @Modifying + @Query(value = "update RksIsi ri " + + "set ri.isDelete = true " + + "where ri.rksDaftarIsiId = :rksDaftarIsiId") + void deleteRksIsi(@Param("rksDaftarIsiId") Long rksDaftarIsiId); +} diff --git a/src/main/java/com/iconplus/smartproc/repository/RksTemplateRepository.java b/src/main/java/com/iconplus/smartproc/repository/RksTemplateRepository.java new file mode 100644 index 0000000..41c811c --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/repository/RksTemplateRepository.java @@ -0,0 +1,35 @@ +package com.iconplus.smartproc.repository; + +import com.iconplus.smartproc.model.entity.RksTemplate; +import com.iconplus.smartproc.model.projection.RksTemplateView; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +@Repository +public interface RksTemplateRepository extends JpaRepository { + + Optional findByKodeTemplateAndIsDeleteFalse(String kodeTemplate); + + Optional findByIdAndIsDeleteFalse(Long id); + + @Query(value = "SELECT rt.id as id, " + + "rt.kodeTemplate as kodeTemplate, " + + "rt.namaTemplate as namaTemplate, " + + "rt.metodePengadaanId as metodePengadaanId, " + + "m.metodePengadaan as metodePengadaan, " + + "rt.versi as versi, " + + "rt.rksDaftarIsiId as rksDaftarIsiId, " + + "rdi.namaTemplate as daftarIsi, " + + "rt.isActive as isActive " + + "FROM RksTemplate as rt " + + "JOIN RksDaftarIsi rdi ON rdi.id = rt.rksDaftarIsiId " + + "JOIN MetodePengadaan m ON m.id = rt.metodePengadaanId " + + "WHERE rt.isDelete = 0") + Page getListRksTemplate(Pageable pageable); + +} diff --git a/src/main/java/com/iconplus/smartproc/repository/RolesRepository.java b/src/main/java/com/iconplus/smartproc/repository/RolesRepository.java index 2d15fc0..1260c04 100644 --- a/src/main/java/com/iconplus/smartproc/repository/RolesRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/RolesRepository.java @@ -1,10 +1,45 @@ package com.iconplus.smartproc.repository; -import com.iconplus.smartproc.entity.Roles; +import com.iconplus.smartproc.model.entity.Roles; +import com.iconplus.smartproc.model.projection.RolesView; +import com.iconplus.smartproc.model.projection.UserRoleView; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; +import java.util.Optional; + @Repository public interface RolesRepository extends JpaRepository { + + @Query(value = "SELECT u.id as id, " + + "u.username as username, " + + "u.password as password, " + + "u.roleId as roleId, " + + "r.role as role " + + "FROM Users u " + + "join Roles r on r.id=u.roleId " + + "WHERE u.isDelete = false " + + "AND r.isDelete = false " + + "AND u.username = :userName ") + Optional getUserRoleByUserId(String userName); + + @Query(value = "SELECT r.id as id, " + + "r.role as role, " + + "r.keterangan as keterangan, " + + "r.isActive as isActive, " + + "r.isDelete as isDelete " + + "FROM Roles r " + + "WHERE r.isDelete = false " + + "AND (:search = '' " + + "or (UPPER(r.role) like :search OR UPPER(r.keterangan) like :search)) " + + "ORDER BY r.id") + Page findAllRolesANdDeletedFalse(String search, Pageable pageable); + + Optional findByIdAndIsDeleteFalse(Long id); + + Optional findByRoleAndIsDeleteFalse(String role); } diff --git a/src/main/java/com/iconplus/smartproc/repository/StrategiPengadaanRepository.java b/src/main/java/com/iconplus/smartproc/repository/StrategiPengadaanRepository.java new file mode 100644 index 0000000..df56f9e --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/repository/StrategiPengadaanRepository.java @@ -0,0 +1,32 @@ +package com.iconplus.smartproc.repository; + +import com.iconplus.smartproc.model.entity.StrategiPengadaan; +import com.iconplus.smartproc.model.projection.StrategiPengadaanView; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +@Repository +public interface StrategiPengadaanRepository extends JpaRepository { + + @Query(value = "SELECT sp.id as id, " + + "sp.strategiPengadaan as strategiPengadaan, " + + "sp.keterangan as keterangan, " + + "sp.isActive as isActive, " + + "sp.isDelete as isDelete " + + "FROM StrategiPengadaan sp " + + "WHERE sp.isDelete = false " + + "AND (:search = '' " + + "or UPPER(sp.strategiPengadaan) like :search) " + + "ORDER BY sp.id") + Page getAllStrategiPengadaan(String search, Pageable pageable); + + Optional findByIdAndIsDeleteFalse(Long id); + + Optional findByStrategiPengadaanAndIsDeleteFalse(String strategiPengadaan); + +} diff --git a/src/main/java/com/iconplus/smartproc/repository/StrategipengadaanRepository.java b/src/main/java/com/iconplus/smartproc/repository/StrategipengadaanRepository.java deleted file mode 100644 index d1733a9..0000000 --- a/src/main/java/com/iconplus/smartproc/repository/StrategipengadaanRepository.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.iconplus.smartproc.repository; - -import com.iconplus.smartproc.entity.Strategipengadaan; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface StrategipengadaanRepository extends JpaRepository { - -} diff --git a/src/main/java/com/iconplus/smartproc/repository/SumberDanaRepository.java b/src/main/java/com/iconplus/smartproc/repository/SumberDanaRepository.java new file mode 100644 index 0000000..8769890 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/repository/SumberDanaRepository.java @@ -0,0 +1,30 @@ +package com.iconplus.smartproc.repository; + +import com.iconplus.smartproc.model.entity.SumberDana; +import com.iconplus.smartproc.model.projection.SumberDanaView; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +@Repository +public interface SumberDanaRepository extends JpaRepository { + + Optional findByIdAndIsDeleteFalse(Long id); + Optional findBySumberDanaAndIsDeleteFalse(String sumberDana); + + @Query(value = "SELECT sd.id as id, " + + "sd.sumberDana as sumberDana, " + + "sd.keterangan as keterangan, " + + "sd.isActive as isActive " + + "FROM SumberDana sd " + + "WHERE sd.isDelete = false " + + "AND (:search = '' or UPPER(sd.sumberDana) like :search) " + + "ORDER BY sd.id") + Page getListSumberDana(String search, Pageable pageable); + + +} diff --git a/src/main/java/com/iconplus/smartproc/repository/SumberdanaRepository.java b/src/main/java/com/iconplus/smartproc/repository/SumberdanaRepository.java deleted file mode 100644 index 9d204f5..0000000 --- a/src/main/java/com/iconplus/smartproc/repository/SumberdanaRepository.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.iconplus.smartproc.repository; - -import com.iconplus.smartproc.entity.Sumberdana; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface SumberdanaRepository extends JpaRepository { - -} diff --git a/src/main/java/com/iconplus/smartproc/repository/SupplyPositioningMatrixRepository.java b/src/main/java/com/iconplus/smartproc/repository/SupplyPositioningMatrixRepository.java new file mode 100644 index 0000000..85c2c48 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/repository/SupplyPositioningMatrixRepository.java @@ -0,0 +1,32 @@ +package com.iconplus.smartproc.repository; + +import com.iconplus.smartproc.model.projection.SupplyPositioningMatrixView; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; +import com.iconplus.smartproc.model.entity.SupplyPositioningMatrix; + +import java.util.Optional; + +@Repository +public interface SupplyPositioningMatrixRepository extends JpaRepository { + + @Query(value = "SELECT spm.id as id, " + + "spm.supplyPositioningMatrix as supplyPositioningMatrix, " + + "spm.keterangan as keterangan, " + + "spm.isActive as isActive, " + + "spm.isDelete as isDelete " + + "FROM SupplyPositioningMatrix spm " + + "WHERE spm.isDelete = false " + + "AND (:search = '' " + + "or UPPER(spm.supplyPositioningMatrix) like :search) " + + "ORDER BY spm.id") + Page getAllSupplyPositioningMatrix(String search, Pageable pageable); + + Optional findByIdAndIsDeleteFalse(Long id); + + Optional findBySupplyPositioningMatrixAndIsDeleteFalse(String supplyPositioningMatrix); + +} diff --git a/src/main/java/com/iconplus/smartproc/repository/SupplypositioningmatrixRepository.java b/src/main/java/com/iconplus/smartproc/repository/SupplypositioningmatrixRepository.java deleted file mode 100644 index a4c1d9b..0000000 --- a/src/main/java/com/iconplus/smartproc/repository/SupplypositioningmatrixRepository.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.iconplus.smartproc.repository; - -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; -import com.iconplus.smartproc.entity.Supplypositioningmatrix; - -@Repository -public interface SupplypositioningmatrixRepository extends JpaRepository { - -} diff --git a/src/main/java/com/iconplus/smartproc/repository/TokenManagementRepository.java b/src/main/java/com/iconplus/smartproc/repository/TokenManagementRepository.java new file mode 100644 index 0000000..c598f8b --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/repository/TokenManagementRepository.java @@ -0,0 +1,29 @@ +package com.iconplus.smartproc.repository; + +import com.iconplus.smartproc.model.entity.TokenManagement; +import com.iconplus.smartproc.model.projection.TokenManagementView; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Optional; + +@Repository +public interface TokenManagementRepository extends JpaRepository { + + @Query(value = "SELECT access_token as accessToken FROM token_management " + + "WHERE user_id = :userId " + + "AND is_delete = 0 " + + "AND expired_time >= CURRENT_TIMESTAMP", nativeQuery = true) + List findAccessTokenByUserIdAndDeletedFalse(Long userId); + + @Query(value = "SELECT tm from TokenManagement tm " + + "WHERE tm.refreshToken = :refreshToken " + + "and tm.isDelete = false") + Optional findByRefreshToken(String refreshToken); + + Optional findByAccessTokenAndIsDeleteFalse(String accessToken); + + Optional findByUserId(Long id); +} diff --git a/src/main/java/com/iconplus/smartproc/repository/UnitInisiatorRepository.java b/src/main/java/com/iconplus/smartproc/repository/UnitInisiatorRepository.java new file mode 100644 index 0000000..0670075 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/repository/UnitInisiatorRepository.java @@ -0,0 +1,30 @@ +package com.iconplus.smartproc.repository; + +import com.iconplus.smartproc.model.projection.UnitInisiatorView; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; +import com.iconplus.smartproc.model.entity.UnitInisiator; + +import java.util.Optional; + +@Repository +public interface UnitInisiatorRepository extends JpaRepository { + + Optional findByIdAndIsDeleteFalse(Long id); + Optional findByUnitInisiatorAndIsDeleteFalse(String unitInisiator); + + @Query(value = "SELECT ui.id as id, " + + "ui.unitInisiator as unitInisiator, " + + "ui.keterangan as keterangan, " + + "ui.isActive as isActive " + + "FROM UnitInisiator ui " + + "WHERE ui.isDelete = false " + + "AND (:search = '' OR UPPER(ui.unitInisiator) like :search) " + + "ORDER BY ui.id") + Page getListUnitInisiator(String search, Pageable pageable); + + +} diff --git a/src/main/java/com/iconplus/smartproc/repository/UnitinisiatorRepository.java b/src/main/java/com/iconplus/smartproc/repository/UnitinisiatorRepository.java deleted file mode 100644 index 2fd6cde..0000000 --- a/src/main/java/com/iconplus/smartproc/repository/UnitinisiatorRepository.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.iconplus.smartproc.repository; - -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; -import com.iconplus.smartproc.entity.Unitinisiator; - -@Repository -public interface UnitinisiatorRepository extends JpaRepository { - -} diff --git a/src/main/java/com/iconplus/smartproc/repository/UsersRepository.java b/src/main/java/com/iconplus/smartproc/repository/UsersRepository.java index 8a67e92..5ae8f69 100644 --- a/src/main/java/com/iconplus/smartproc/repository/UsersRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/UsersRepository.java @@ -1,10 +1,119 @@ package com.iconplus.smartproc.repository; -import com.iconplus.smartproc.entity.Users; +import com.iconplus.smartproc.model.entity.Users; +import com.iconplus.smartproc.model.projection.UserRoleView; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; +import java.util.List; +import java.util.Optional; + @Repository public interface UsersRepository extends JpaRepository { + + @Query("SELECT u.id as id, " + + "u.nama as nama, " + + "u.username as username, " + + "u.jabatanId as jabatanId, " + + "j.jabatan as jabatan, " + + "u.roleId as roleId, " + + "r.role as role, " + + "u.bidangId as bidangId, " + + "b.bidang as bidang, " + + "u.instansiId as instansiId, " + + "i.instansi as instansi, " + + "u.email as email, " + + "u.telepon as telepon, " + + "u.isActive as isActive, " + + "u.isDelete as isDelete " + + "FROM Users u " + + "JOIN Roles r ON r.id = u.roleId " + + "JOIN Bidang b ON b.id = u.bidangId " + + "JOIN Instansi i ON i.id = u.instansiId " + + "JOIN Jabatan j ON j.id = u.jabatanId " + + "Where u.isDelete = false " + + "AND (:search='' " + + "or (UPPER(u.nama) like :search " + + " OR UPPER(j.jabatan) like :search " + + " OR UPPER(r.role) like :search " + + " OR UPPER(b.bidang) like :search " + + " OR UPPER(i.instansi) like :search " + + " OR UPPER(u.email) like :search) " + + ") " + + "ORDER by u.id") + Page getAllUsersAndDeletedFase(String search, Pageable pageable); + + Optional findByEmailAndIsDeleteFalse(String email); + + @Query("SELECT u.id as id, " + + "u.nama as nama, " + + "u.username as username, " + + "u.password as password, " + + "u.jabatanId as jabatanId, " + + "j.jabatan as jabatan, " + + "u.roleId as roleId, " + + "r.role as role, " + + "u.bidangId as bidangId, " + + "b.bidang as bidang, " + + "u.instansiId as instansiId, " + + "i.instansi as instansi, " + + "u.email as email, " + + "u.telepon as telepon, " + + "u.isActive as isActive, " + + "u.isDelete as isDelete " + + "FROM Users u " + + "JOIN Roles r ON r.id = u.roleId " + + "JOIN Bidang b ON b.id = u.bidangId " + + "JOIN Instansi i ON i.id = u.instansiId " + + "JOIN Jabatan j ON j.id = u.jabatanId " + + "Where u.isDelete = false " + + "AND (u.username = :input OR u.email = :input)") + Optional getByUsernameOrEmail(String input); + + Optional findByIdAndIsDeleteFalse(Long id); + + @Query("SELECT u.id as id, " + + "u.nama as nama, " + + "u.username as username, " + + "u.jabatanId as jabatanId, " + + "j.jabatan as jabatan, " + + "u.roleId as roleId, " + + "r.role as role, " + + "u.bidangId as bidangId, " + + "b.bidang as bidang, " + + "u.instansiId as instansiId, " + + "i.instansi as instansi, " + + "u.email as email, " + + "u.telepon as telepon, " + + "u.isActive as isActive, " + + "u.isDelete as isDelete " + + "FROM Users u " + + "JOIN Roles r ON r.id = u.roleId " + + "JOIN Bidang b ON b.id = u.bidangId " + + "JOIN Instansi i ON i.id = u.instansiId " + + "JOIN Jabatan j ON j.id = u.jabatanId " + + "Where u.isDelete = false " + + "AND u.id = :id") + Optional getUserByIdAndDeletedFase(Long id); + + @Query(value = "SELECT * FROM users " + + "WHERE remember_id = :rememberId " + + "AND is_delete = 0 " + + "AND expired_time >= CURRENT_TIMESTAMP", nativeQuery = true) + Optional getUsersByEmailAndExpiredTime(String rememberId); + + @Query(value = "SELECT u.id as id, " + + "u.nama as nama, " + + "u.jabatanId as jabatanId, " + + "j.jabatan as jabatan " + + "FROM Users u " + + "JOIN Jabatan j ON j.id = u.jabatanId " + + "WHERE u.isDelete = false " + + "AND j.jabatan like :jabatan " + + "ORDER BY u.id") + List getListUserJabatan(String jabatan); } diff --git a/src/main/java/com/iconplus/smartproc/service/CommonService.java b/src/main/java/com/iconplus/smartproc/service/CommonService.java new file mode 100644 index 0000000..9e2b363 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/CommonService.java @@ -0,0 +1,121 @@ +package com.iconplus.smartproc.service; + +import com.google.zxing.BarcodeFormat; +import com.google.zxing.client.j2se.MatrixToImageWriter; +import com.google.zxing.common.BitMatrix; +import com.google.zxing.qrcode.QRCodeWriter; +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.model.entity.TokenManagement; +import com.iconplus.smartproc.model.request.UsersRequest; +import com.iconplus.smartproc.repository.*; +import com.iconplus.smartproc.util.Constants; +import com.iconplus.smartproc.util.EncryptDecryptUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +import java.awt.image.BufferedImage; +import java.sql.Timestamp; +import java.time.Instant; + +@Service +public class CommonService { + + @Value("${config.password.private-key}") + private String privateKey; + + private RolesRepository rolesRepository; + private BidangRepository bidangRepository; + private InstansiRepository instansiRepository; + private TokenManagementRepository tokenManagementRepository; + + public CommonService(RolesRepository rolesRepository, + BidangRepository bidangRepository, + InstansiRepository instansiRepository, + TokenManagementRepository tokenManagementRepository) { + this.rolesRepository = rolesRepository; + this.bidangRepository = bidangRepository; + this.instansiRepository = instansiRepository; + this.tokenManagementRepository = tokenManagementRepository; + } + + public void validateUserRequst(UsersRequest input) { + + var roles= rolesRepository.findByIdAndIsDeleteFalse(input.getRoleId()); + if (roles.isEmpty()) { + throw new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "Role", input.getRoleId())); + } + + var bidang= bidangRepository.findByIdAndIsDeleteFalse(input.getBidangId()); + if (bidang.isEmpty()) { + throw new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "Bidang", input.getBidangId())); + } + + var instansi= instansiRepository.findByIdAndIsDeleteFalse(input.getInstansiId()); + if (instansi.isEmpty()) { + throw new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "Instansi", input.getInstansiId())); + } + } + + public void saveUserToken(TokenManagement tokenManagement, Integer tokenExpiry) { + + var issuedTime = Timestamp.from(Instant.now()); + var expirationTime = Timestamp.from(Instant.now().plusMillis(tokenExpiry * (long) 60000)); + + if (StringUtils.isNotBlank(tokenManagement.getId())) { + tokenManagement.setIssuedTime(issuedTime); + tokenManagement.setExpiredTime(expirationTime); + tokenManagementRepository.save(tokenManagement); + return; + } + + var existToken = tokenManagementRepository.findByUserId(tokenManagement.getUserId()); + + if (existToken.isPresent()) { + existToken.get().setAccessToken(tokenManagement.getAccessToken()); + existToken.get().setRefreshToken(tokenManagement.getRefreshToken()); + existToken.get().setIsDelete(false); + existToken.get().setIssuedTime(issuedTime); + existToken.get().setExpiredTime(expirationTime); + tokenManagementRepository.save(existToken.get()); + } else { + tokenManagementRepository.save(TokenManagement.builder() + .userId(tokenManagement.getUserId()) + .accessToken(tokenManagement.getAccessToken()) + .refreshToken(tokenManagement.getRefreshToken()) + .issuedTime(issuedTime) + .expiredTime(expirationTime) + .isDelete(false) + .build()); + } + } + + public String getPassword(String password) { + try { + return EncryptDecryptUtils.decrypt(password, privateKey); + } catch (Exception ex) { + throw new BusinessException(Constants.ERR_CODE_10011, + Constants.ERR_TTL_10011, + Constants.ERR_MSG_10011); + } + + } + + public BufferedImage generateQRCodeImage(String barcodeText) throws Exception { + QRCodeWriter barcodeWriter = new QRCodeWriter(); + BitMatrix bitMatrix = + barcodeWriter.encode(barcodeText, BarcodeFormat.QR_CODE, 200, 200); + + return MatrixToImageWriter.toBufferedImage(bitMatrix); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/approval/GetApprovalService.java b/src/main/java/com/iconplus/smartproc/service/approval/GetApprovalService.java new file mode 100644 index 0000000..c8e70be --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/approval/GetApprovalService.java @@ -0,0 +1,115 @@ +package com.iconplus.smartproc.service.approval; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.DrpPengadaanDokumen; +import com.iconplus.smartproc.model.projection.DrpRekomendasiView; +import com.iconplus.smartproc.model.request.DrpApprovalRequest; +import com.iconplus.smartproc.model.response.DrpApprovalResponse; +import com.iconplus.smartproc.model.response.DrpPengadaanDokumenResponse; +import com.iconplus.smartproc.model.response.DrpPengadaanResponse; +import com.iconplus.smartproc.model.response.DrpRekomendasiResponse; +import com.iconplus.smartproc.repository.DrpPengadaanDokumenRepository; +import com.iconplus.smartproc.repository.DrpPengadaanRepository; +import com.iconplus.smartproc.repository.DrpRekomendasiRepository; +import com.iconplus.smartproc.service.drppengadaan.GetDrpPengadaanService; +import com.iconplus.smartproc.util.Constants; +import org.apache.commons.lang3.BooleanUtils; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class GetApprovalService implements BaseService { + + private final DrpPengadaanRepository drpPengadaanRepository; + private final DrpPengadaanDokumenRepository drpPengadaanDokumenRepository; + private final DrpRekomendasiRepository drpRekomendasiRepository; + + public GetApprovalService(DrpPengadaanRepository drpPengadaanRepository, + DrpPengadaanDokumenRepository drpPengadaanDokumenRepository, + DrpRekomendasiRepository drpRekomendasiRepository) { + this.drpPengadaanRepository = drpPengadaanRepository; + this.drpPengadaanDokumenRepository = drpPengadaanDokumenRepository; + this.drpRekomendasiRepository = drpRekomendasiRepository; + } + + @Override + public DrpApprovalResponse execute(DrpApprovalRequest input) { + var drpPengadaan = drpPengadaanRepository.getDrpPengadaanById(input.getJenisPengadaanId()) + .orElseThrow(() -> new BusinessException(Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "DRP Pengadaan", input.getJenisPengadaanId()))); + + List drpPengadaanDokumenResponseList = new ArrayList<>(); + var drpPengadaanDokumenList = drpPengadaanDokumenRepository.findByDrpPengadaanIdAndIsDeleteFalse(drpPengadaan.getId()); + for (DrpPengadaanDokumen drpPengadaanDokumen : drpPengadaanDokumenList) { + DrpPengadaanDokumenResponse drpPengadaanDokumenResponse = DrpPengadaanDokumenResponse.builder() + .id(drpPengadaanDokumen.getId()) + .drpId(drpPengadaanDokumen.getDrpId()) + .jenisDokumenId(drpPengadaanDokumen.getJenisDokumenId()) + .filename(drpPengadaanDokumen.getFilename()) + .keterangan(drpPengadaanDokumen.getKeterangan()) + .build(); + drpPengadaanDokumenResponseList.add(drpPengadaanDokumenResponse); + } + + var pengadaan = DrpPengadaanResponse.builder() + .id(drpPengadaan.getId()) + .drpId(drpPengadaan.getDrpId()) + .nomor(drpPengadaan.getNomor()) + .namaPengadaan(drpPengadaan.getNamaPengadaan()) + .lokasiId(drpPengadaan.getLokasiId()) + .lokasi(drpPengadaan.getLokasi()) + .jenisPengadaanId(drpPengadaan.getJenisPengadaanId()) + .jenisPengadaan(drpPengadaan.getJenisPengadaan()) + .unitInisiatorId(drpPengadaan.getUnitInisiatorId()) + .unitInisiator(drpPengadaan.getUnitInisiator()) + .hpe(drpPengadaan.getHpe()) + .pagu(drpPengadaan.getPagu()) + .sumberDanaId(drpPengadaan.getSumberDanaId()) + .sumberDana(drpPengadaan.getSumberDana()) + .metodePengadaanId(drpPengadaan.getMetodePengadaanId()) + .metodePengadaan(drpPengadaan.getMetodePengadaan()) + .supplyPositioningMatrixId(drpPengadaan.getSupplyPositioningMatrixId()) + .supplyPositioningMatrix(drpPengadaan.getSupplyPositioningMatrix()) + .metodePenyampaianId(drpPengadaan.getMetodePenyampaianId()) + .metodePenyampaian(drpPengadaan.getMetodePenyampaian()) + .jenisKontrakId(drpPengadaan.getJenisKontrakId()) + .jenisKontrak(drpPengadaan.getJenisKontrak()) + .strategiPengadaanId(drpPengadaan.getStrategiPengadaanId()) + .strategiPengadaan(drpPengadaan.getStrategiPengadaan()) + .rencanaTanggal(drpPengadaan.getRencanaTanggal()) + .targetTanggal(drpPengadaan.getTargetTanggal()) + .isActive(drpPengadaan.getIsActive()) + .build(); + + List drpRekomendasiResponseList = new ArrayList<>(); + var listDrpRekomendasi = drpRekomendasiRepository.getListDrpRekomendasi(input.getJenisPengadaanId()); + for (DrpRekomendasiView drpRekomendasiView : listDrpRekomendasi) { + DrpRekomendasiResponse drpRekomendasiResponse = DrpRekomendasiResponse.builder() + .id(drpRekomendasiView.getId()) + .jabatan(drpRekomendasiView.getJabatan()) + .rekomendasi(drpRekomendasiView.getRekomendasi()) + .rekomendasiDate(drpRekomendasiView.getRekomendasiDate()) + .build(); + if (drpRekomendasiView.getIsApprove() != null) { + if (BooleanUtils.isTrue(drpRekomendasiView.getIsApprove())) { + drpRekomendasiResponse.setStatus("Setuju"); + } else { + drpRekomendasiResponse.setStatus("Tolak"); + } + } + + drpRekomendasiResponseList.add(drpRekomendasiResponse); + } + + return DrpApprovalResponse.builder() + .dataPengadaan(pengadaan) + .dataPengadaanDokumen(drpPengadaanDokumenResponseList) + .dataRekomendasi(drpRekomendasiResponseList) + .build(); + + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/approval/GetHistoryApprovalService.java b/src/main/java/com/iconplus/smartproc/service/approval/GetHistoryApprovalService.java new file mode 100644 index 0000000..d91fb1b --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/approval/GetHistoryApprovalService.java @@ -0,0 +1,55 @@ +package com.iconplus.smartproc.service.approval; + +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.DrpApproval; +import com.iconplus.smartproc.model.projection.DrpApprovalHistoryView; +import com.iconplus.smartproc.model.projection.DrpApprovalView; +import com.iconplus.smartproc.model.request.DrpApprovalRequest; +import com.iconplus.smartproc.model.response.DrpApprovalHistoryResponse; +import com.iconplus.smartproc.model.response.DrpApprovalResponse; +import com.iconplus.smartproc.model.response.GetListDrpApprovalHistoryResponse; +import com.iconplus.smartproc.model.response.GetListDrpApprovalResponse; +import com.iconplus.smartproc.repository.DrpApprovalHistoryRepository; +import com.iconplus.smartproc.repository.DrpApprovalRepository; +import org.apache.commons.lang3.BooleanUtils; +import org.springframework.stereotype.Service; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +@Service +public class GetHistoryApprovalService implements BaseService { + + private final DrpApprovalRepository drpApprovalRepository; + private final DrpApprovalHistoryRepository drpApprovalHistoryRepository; + public GetHistoryApprovalService(DrpApprovalRepository drpApprovalRepository, + DrpApprovalHistoryRepository drpApprovalHistoryRepository) { + this.drpApprovalRepository = drpApprovalRepository; + this.drpApprovalHistoryRepository = drpApprovalHistoryRepository; + + } + + + @Override + public GetListDrpApprovalHistoryResponse execute(DrpApprovalRequest input) { + + List drpApprovalHistoryResponses = new ArrayList<>(); + var drpApprovalHistoryViewList = drpApprovalHistoryRepository.getRiwayatApprovalByDrpId(input.getDrpId()); + for (DrpApprovalHistoryView drpApprovalHistoryView : drpApprovalHistoryViewList) { + DrpApprovalHistoryResponse drpApprovalHistoryResponse = DrpApprovalHistoryResponse.builder() + .nama(drpApprovalHistoryView.getNama()) + .jabatan(drpApprovalHistoryView.getJabatan()) + .status(drpApprovalHistoryView.getStatus()) + .date(drpApprovalHistoryView.getDate()) + .catatan(drpApprovalHistoryView.getCatatan()) + .build(); + drpApprovalHistoryResponses.add(drpApprovalHistoryResponse); + } + + + return GetListDrpApprovalHistoryResponse.builder() + .data(drpApprovalHistoryResponses) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/approval/GetListApprovalDrpServie.java b/src/main/java/com/iconplus/smartproc/service/approval/GetListApprovalDrpServie.java new file mode 100644 index 0000000..20464ac --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/approval/GetListApprovalDrpServie.java @@ -0,0 +1,67 @@ +package com.iconplus.smartproc.service.approval; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.model.Pagination; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.DrpApproval; +import com.iconplus.smartproc.model.projection.DrpApprovalView; +import com.iconplus.smartproc.model.request.DrpApprovalRequest; +import com.iconplus.smartproc.model.response.DrpApprovalResponse; +import com.iconplus.smartproc.model.response.GetListDrpApprovalResponse; +import com.iconplus.smartproc.repository.DrpApprovalRepository; +import com.iconplus.smartproc.repository.DrpRekomendasiRepository; +import com.iconplus.smartproc.repository.DrpRepository; +import com.iconplus.smartproc.util.Constants; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import java.sql.Date; +import java.util.ArrayList; +import java.util.List; + +@Service +@Slf4j +public class GetListApprovalDrpServie implements BaseService { + + private final DrpRepository drpRepository; + private final DrpApprovalRepository drpApprovalRepository; + + public GetListApprovalDrpServie(DrpRepository drpRepository, + DrpApprovalRepository drpApprovalRepository) { + this.drpApprovalRepository = drpApprovalRepository; + this.drpRepository = drpRepository; + + } + + @Override + public GetListDrpApprovalResponse execute(DrpApprovalRequest input) { + + List drpApprovalResponseList = new ArrayList<>(); + var drpApprovalViews = drpRepository.getListApprovalDrp(input.getPageable()); + for (DrpApprovalView drpApprovalView : drpApprovalViews) { + DrpApprovalResponse drpApprovalResponse = DrpApprovalResponse.builder() + .id(drpApprovalView.getId()) + .drpId(drpApprovalView.getDrpId()) + .tahun(drpApprovalView.getTahun()) + .approveStatus(drpApprovalView.getApproveStatus()) + .approverVpDate(drpApprovalView.getVpApproveDate()) + .approverDirekturDate(drpApprovalView.getDirekturApproveDate()) + .approverKomiteDate(drpApprovalView.getKomiteApproveDate()) + .build(); + drpApprovalResponseList.add(drpApprovalResponse); + } + + return GetListDrpApprovalResponse.builder() + .data(drpApprovalResponseList) + .pagination(Pagination.builder() + .pageSize(input.getPageable().getPageSize()) + .currentPage(input.getPageable().getPageNumber()) + .totalPages(drpApprovalViews.getTotalPages()) + .totalRecords(drpApprovalViews.getTotalElements()) + .isFirstPage(drpApprovalViews.isFirst()) + .isLastPage(drpApprovalViews.isLast()) + .build()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/approval/GetListRekomendasiService.java b/src/main/java/com/iconplus/smartproc/service/approval/GetListRekomendasiService.java new file mode 100644 index 0000000..8b9c7f8 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/approval/GetListRekomendasiService.java @@ -0,0 +1,61 @@ +package com.iconplus.smartproc.service.approval; + +import com.iconplus.smartproc.helper.model.Pagination; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.projection.DrpRekomendasiView; +import com.iconplus.smartproc.model.request.DrpRekomendasiRequest; +import com.iconplus.smartproc.model.response.DrpRekomendasiResponse; +import com.iconplus.smartproc.model.response.GetListDrpRekomendasiResponse; +import com.iconplus.smartproc.repository.DrpRekomendasiRepository; +import org.apache.commons.lang3.BooleanUtils; +import org.springframework.stereotype.Service; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +@Service +public class GetListRekomendasiService implements BaseService { + + private final DrpRekomendasiRepository drpRekomendasiRepository; + + public GetListRekomendasiService(DrpRekomendasiRepository drpRekomendasiRepository) { + this.drpRekomendasiRepository = drpRekomendasiRepository; + } + + @Override + public GetListDrpRekomendasiResponse execute(DrpRekomendasiRequest input) { + + List drpRekomendasiResponseList = new ArrayList<>(); + var listDrpRekomendasi = drpRekomendasiRepository.getListDrpRekomendasi(input.getJenisPengadaanId(), input.getPageable()); + for (DrpRekomendasiView drpRekomendasiView : listDrpRekomendasi) { + DrpRekomendasiResponse drpRekomendasiResponse = DrpRekomendasiResponse.builder() + .id(drpRekomendasiView.getId()) + .jabatan(drpRekomendasiView.getJabatan()) + .rekomendasi(drpRekomendasiView.getRekomendasi()) + .rekomendasiDate(drpRekomendasiView.getRekomendasiDate()) + .build(); + if (drpRekomendasiView.getIsApprove() != null) { + if (BooleanUtils.isTrue(drpRekomendasiView.getIsApprove())) { + drpRekomendasiResponse.setStatus("Setuju"); + } else { + drpRekomendasiResponse.setStatus("Tolak"); + } + } + + drpRekomendasiResponseList.add(drpRekomendasiResponse); + } + + return GetListDrpRekomendasiResponse.builder() + .data(drpRekomendasiResponseList) + .pagination(Pagination.builder() + .pageSize(input.getPageable().getPageSize()) + .currentPage(input.getPageable().getPageNumber()) + .totalPages(listDrpRekomendasi.getTotalPages()) + .totalRecords(listDrpRekomendasi.getTotalElements()) + .isFirstPage(listDrpRekomendasi.isFirst()) + .isLastPage(listDrpRekomendasi.isLast()) + .build()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/approval/GetListUserDirekturKomiteService.java b/src/main/java/com/iconplus/smartproc/service/approval/GetListUserDirekturKomiteService.java new file mode 100644 index 0000000..97581d7 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/approval/GetListUserDirekturKomiteService.java @@ -0,0 +1,41 @@ +package com.iconplus.smartproc.service.approval; + +import com.iconplus.smartproc.helper.model.EmptyRequest; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.projection.UserRoleView; +import com.iconplus.smartproc.model.response.GetListUserApprovalResponse; +import com.iconplus.smartproc.model.response.UserApprovalResponse; +import com.iconplus.smartproc.repository.UsersRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class GetListUserDirekturKomiteService implements BaseService { + + private UsersRepository usersRepository; + public GetListUserDirekturKomiteService(UsersRepository usersRepository) { + this.usersRepository = usersRepository; + } + + @Override + public GetListUserApprovalResponse execute(EmptyRequest input) { + + List userApprovalResponseList = new ArrayList<>(); + + var userRoleViews = usersRepository.getListUserJabatan(Constants.JABATAN_DIREKTUR_KOMITE); + for (UserRoleView userRoleView : userRoleViews) { + UserApprovalResponse userApprovalResponse = UserApprovalResponse.builder() + .id(userRoleView.getId()) + .nama(userRoleView.getNama() + "-" + userRoleView.getJabatan()) + .build(); + userApprovalResponseList.add(userApprovalResponse); + } + + return GetListUserApprovalResponse.builder() + .data(userApprovalResponseList) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/approval/GetListUserVpService.java b/src/main/java/com/iconplus/smartproc/service/approval/GetListUserVpService.java new file mode 100644 index 0000000..a046877 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/approval/GetListUserVpService.java @@ -0,0 +1,41 @@ +package com.iconplus.smartproc.service.approval; + +import com.iconplus.smartproc.helper.model.EmptyRequest; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.projection.UserRoleView; +import com.iconplus.smartproc.model.response.GetListUserApprovalResponse; +import com.iconplus.smartproc.model.response.UserApprovalResponse; +import com.iconplus.smartproc.repository.UsersRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class GetListUserVpService implements BaseService { + + private UsersRepository usersRepository; + public GetListUserVpService(UsersRepository usersRepository) { + this.usersRepository = usersRepository; + } + + @Override + public GetListUserApprovalResponse execute(EmptyRequest input) { + + List userApprovalResponseList = new ArrayList<>(); + + var userRoleViews = usersRepository.getListUserJabatan(Constants.JABATAN_VP); + for (UserRoleView userRoleView : userRoleViews) { + UserApprovalResponse userApprovalResponse = UserApprovalResponse.builder() + .id(userRoleView.getId()) + .nama(userRoleView.getNama() + "-" + userRoleView.getJabatan()) + .build(); + userApprovalResponseList.add(userApprovalResponse); + } + + return GetListUserApprovalResponse.builder() + .data(userApprovalResponseList) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/approval/PostCreateDrpApprovalService.java b/src/main/java/com/iconplus/smartproc/service/approval/PostCreateDrpApprovalService.java new file mode 100644 index 0000000..425a0aa --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/approval/PostCreateDrpApprovalService.java @@ -0,0 +1,74 @@ +package com.iconplus.smartproc.service.approval; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.DrpApproval; +import com.iconplus.smartproc.model.entity.DrpApprovalHistory; +import com.iconplus.smartproc.model.request.DrpApprovalRequest; +import com.iconplus.smartproc.model.request.ListDrpApprovalRequest; +import com.iconplus.smartproc.repository.DrpApprovalHistoryRepository; +import com.iconplus.smartproc.repository.DrpApprovalRepository; +import com.iconplus.smartproc.repository.DrpRepository; +import com.iconplus.smartproc.util.Constants; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import java.sql.Date; +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; + +@Service +public class PostCreateDrpApprovalService implements BaseService { + + private final DrpRepository drpRepository; + private final DrpApprovalRepository drpApprovalRepository; + private final DrpApprovalHistoryRepository drpApprovalHistoryRepository; + public PostCreateDrpApprovalService(DrpRepository drpRepository, + DrpApprovalRepository drpApprovalRepository, + DrpApprovalHistoryRepository drpApprovalHistoryRepository) { + this.drpRepository = drpRepository; + this.drpApprovalRepository = drpApprovalRepository; + this.drpApprovalHistoryRepository = drpApprovalHistoryRepository; + } + + @Override + public EmptyResponse execute(ListDrpApprovalRequest input) { + + var drpOptional = drpRepository.findByIdAndIsDeleteFalse(input.getDrpId()); + if (drpOptional.isEmpty()) { + throw new BusinessException(Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "DRP", input.getDrpId())); + } + + List drpApprovalList = new ArrayList<>(); + for (DrpApprovalRequest drpApprovalRequest : input.getData()) { + DrpApproval drpApproval = DrpApproval.builder() + .drpId(input.getDrpId()) + .approverUserId(drpApprovalRequest.getApproverUserId()) + .level(drpApprovalRequest.getLevel()) + .isDelete(false) + .build(); + drpApprovalList.add(drpApproval); + + } + + var approvalList = drpApprovalRepository.saveAll(drpApprovalList); + Date dateNow = Date.valueOf(LocalDate.now()); + approvalList.forEach(c -> { + if (StringUtils.equalsIgnoreCase(c.getLevel(), "VP")) { + DrpApprovalHistory drpApprovalHistory = DrpApprovalHistory.builder() + .date(dateNow) + .drpApprovalId(c.getId()) + .status("Dikirim") + .isDelete(false) + .build(); + drpApprovalHistoryRepository.save(drpApprovalHistory); + } + }); + + return new EmptyResponse(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/approval/PostDrpApprovalExecutionService.java b/src/main/java/com/iconplus/smartproc/service/approval/PostDrpApprovalExecutionService.java new file mode 100644 index 0000000..6a25e05 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/approval/PostDrpApprovalExecutionService.java @@ -0,0 +1,147 @@ +package com.iconplus.smartproc.service.approval; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.DrpApproval; +import com.iconplus.smartproc.model.entity.DrpApprovalHistory; +import com.iconplus.smartproc.model.request.DrpApprovalRequest; +import com.iconplus.smartproc.repository.DrpApprovalHistoryRepository; +import com.iconplus.smartproc.repository.DrpApprovalRepository; +import com.iconplus.smartproc.repository.DrpRepository; +import com.iconplus.smartproc.util.Constants; +import org.apache.commons.lang3.BooleanUtils; +import org.apache.commons.lang3.ObjectUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import javax.transaction.Transactional; +import java.sql.Date; +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; + +@Service +public class PostDrpApprovalExecutionService implements BaseService { + + private final DrpApprovalRepository drpApprovalRepository; + private final DrpRepository drpRepository; + private final DrpApprovalHistoryRepository drpApprovalHistoryRepository; + + public PostDrpApprovalExecutionService(DrpApprovalRepository drpApprovalRepository, + DrpRepository drpRepository, + DrpApprovalHistoryRepository drpApprovalHistoryRepository) { + this.drpApprovalRepository = drpApprovalRepository; + this.drpRepository = drpRepository; + this.drpApprovalHistoryRepository = drpApprovalHistoryRepository; + } + + @Transactional + @Override + public EmptyResponse execute(DrpApprovalRequest input) { + + var drpApproval = drpApprovalRepository.findByDrpIdAndApproverUserIdAndIsDeleteFalse(input.getDrpId(), input.getUserId()) + .orElseThrow(() -> new BusinessException(Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "DRP", input.getDrpId()))); + + var drp = drpRepository.findByIdAndIsDeleteFalse(input.getDrpId()) + .orElseThrow(() -> new BusinessException(Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "DRP", input.getDrpId()))); + + Date dateNow = Date.valueOf(LocalDate.now()); + + drpApproval.setIsApprove(input.getIsApprove()); + drpApproval.setCatatan(input.getCatatan()); + + List drpApprovalHistoryList = new ArrayList<>(); + var listDrpApproval = drpApprovalRepository.findByDrpIdAndIsDeleteFalse(input.getDrpId()); + + DrpApprovalHistory drpApprovalHistoryExecutor = DrpApprovalHistory.builder() + .drpApprovalId(drpApproval.getId()) + .date(dateNow) + .status(BooleanUtils.isTrue(input.getIsApprove()) ? "Disetujui" : "Ditolak") + .isDelete(false) + .build(); + drpApprovalHistoryList.add(drpApprovalHistoryExecutor); + + if (StringUtils.equalsIgnoreCase(drpApproval.getLevel(), "VP")) { + drp.setVpApproveDate(dateNow); + + if (BooleanUtils.isTrue(input.getIsApprove())) { + drp.setApproveStatus(Constants.STATUS_APPROVAL_VP); + + for (DrpApproval drpAppr : listDrpApproval) { + if (StringUtils.equalsIgnoreCase(drpAppr.getLevel(), "KOMITE")) { + DrpApprovalHistory drpApprovalHistory = DrpApprovalHistory.builder() + .drpApprovalId(drpApproval.getId()) + .date(dateNow) + .status("Terkirim") + .isDelete(false) + .build(); + drpApprovalHistoryList.add(drpApprovalHistory); + } + } + + } else { + drp.setApproveStatus(Constants.STATUS_PENYUSUNAN); + drpApproval.setIsDelete(true); + drpApprovalRepository.deleteApprovalByDrpId(input.getDrpId()); + } + + } else if (StringUtils.equalsIgnoreCase(drpApproval.getLevel(), "DIREKTUR")) { + + if (ObjectUtils.isEmpty(drp.getKomiteApproveDate())) { + throw new BusinessException(Constants.ERR_CODE_10013, + Constants.ERR_TTL_10013, + String.format(Constants.ERR_MSG_10013, "KOMITE")); + } + + if (BooleanUtils.isTrue(input.getIsApprove())) { + drp.setApproveStatus(Constants.STATUS_APPROVAL_DIRUT); + } else { + drp.setApproveStatus(Constants.STATUS_PENYUSUNAN); + drpApproval.setIsDelete(true); + drpApprovalRepository.deleteApprovalByDrpId(input.getDrpId()); + } + + drp.setDirekturApproveDate(dateNow); + + + } else { + + if (ObjectUtils.isEmpty(drp.getVpApproveDate())) { + throw new BusinessException(Constants.ERR_CODE_10013, + Constants.ERR_TTL_10013, + String.format(Constants.ERR_MSG_10013, "VP")); + } + + var listKomiteApproval = drpApprovalRepository.getListKomiteApproval(input.getDrpId()); + if (listKomiteApproval.size() == 1) { + drp.setApproveStatus(Constants.STATUS_REKOMENDASI_KOMITE); + } + + drp.setKomiteApproveDate(dateNow); + + for (DrpApproval drpAppr : listDrpApproval) { + if (StringUtils.equalsIgnoreCase(drpAppr.getLevel(), "DIREKTUR")) { + DrpApprovalHistory drpApprovalHistory = DrpApprovalHistory.builder() + .drpApprovalId(drpApproval.getId()) + .date(dateNow) + .status("Terkirim") + .isDelete(false) + .build(); + drpApprovalHistoryList.add(drpApprovalHistory); + } + } + + } + + drpApprovalRepository.save(drpApproval); + drpRepository.save(drp); + drpApprovalHistoryRepository.saveAll(drpApprovalHistoryList); + + return new EmptyResponse(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/approval/PostDrpRekomendasiService.java b/src/main/java/com/iconplus/smartproc/service/approval/PostDrpRekomendasiService.java new file mode 100644 index 0000000..04b5979 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/approval/PostDrpRekomendasiService.java @@ -0,0 +1,50 @@ +package com.iconplus.smartproc.service.approval; + +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.DrpRekomendasi; +import com.iconplus.smartproc.model.request.DrpRekomendasiRequest; +import com.iconplus.smartproc.model.response.DrpRekomendasiResponse; +import com.iconplus.smartproc.repository.DrpApprovalRepository; +import com.iconplus.smartproc.repository.DrpRekomendasiRepository; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +@Service +public class PostDrpRekomendasiService implements BaseService { + + private DrpRekomendasiRepository drpRekomendasiRepository; + private DrpApprovalRepository drpApprovalRepository; + + private PostDrpRekomendasiService(DrpRekomendasiRepository drpRekomendasiRepository, + DrpApprovalRepository drpApprovalRepository) { + this.drpRekomendasiRepository = drpRekomendasiRepository; + this.drpApprovalRepository = drpApprovalRepository; + } + + @Override + public DrpRekomendasiResponse execute(DrpRekomendasiRequest input) { + + if (input.getDrpApprovalId() == null) { + var drpApproval = drpApprovalRepository.findByDrpIdAndApproverUserIdAndIsDeleteFalse(input.getDrpId(), input.getUserId()); + if (drpApproval.isPresent()) { + input.setDrpApprovalId(drpApproval.get().getId()); + } + } + + DrpRekomendasi drpRekomendasi = DrpRekomendasi.builder() + .drpId(input.getDrpId()) + .userId(input.getUserId()) + .jenisPengadaanId(input.getJenisPengadaanId()) + .drpApprovalId(input.getDrpApprovalId()) + .rekomendasi(input.getRekomendasi()) + .rekomendasiDate(input.getRekomendasiDate()) + .isDelete(false) + .build(); + + var result = drpRekomendasiRepository.save(drpRekomendasi); + + return DrpRekomendasiResponse.builder() + .id(result.getId()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/authentication/ChangePasswordService.java b/src/main/java/com/iconplus/smartproc/service/authentication/ChangePasswordService.java new file mode 100644 index 0000000..baf76a7 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/authentication/ChangePasswordService.java @@ -0,0 +1,66 @@ +package com.iconplus.smartproc.service.authentication; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.context.ApiContext; +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.ChangePasswordRequest; +import com.iconplus.smartproc.repository.UsersRepository; +import com.iconplus.smartproc.service.CommonService; +import com.iconplus.smartproc.util.Constants; +import org.apache.commons.lang3.StringUtils; +import org.springframework.http.HttpStatus; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.stereotype.Service; + +@Service +public class ChangePasswordService implements BaseService { + + private ApiContext apiContext; + private UsersRepository usersRepository; + private CommonService commonService; + public ChangePasswordService(UsersRepository usersRepository, + ApiContext apiContext, + CommonService commonService) { + this.usersRepository = usersRepository; + this.apiContext = apiContext; + this.commonService = commonService; + } + + @Override + public EmptyResponse execute(ChangePasswordRequest input) { + + Long id = Long.valueOf(apiContext.getUserId()); + var users = usersRepository.findByIdAndIsDeleteFalse(id) + .orElseThrow(() -> new BusinessException(Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "User", id))); + + String password = commonService.getPassword(input.getCurrentPassword()); + BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder(); + boolean isValidCurrentPassword = bCryptPasswordEncoder.matches(password, users.getPassword()); + + if (!isValidCurrentPassword) { + throw new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10009, + Constants.ERR_TTL_10009, + Constants.ERR_MSG_10009); + } + + String newPassword = commonService.getPassword(input.getNewPassword()); + String confirmationPassword = commonService.getPassword(input.getConfirmationPassword()); + + + if (!StringUtils.equalsIgnoreCase(newPassword, confirmationPassword)) { + throw new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10007, + Constants.ERR_TTL_10007, + Constants.ERR_MSG_10007); + } + + users.setPassword(bCryptPasswordEncoder.encode(newPassword)); + usersRepository.save(users); + + return new EmptyResponse(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/authentication/ForgotPasswordService.java b/src/main/java/com/iconplus/smartproc/service/authentication/ForgotPasswordService.java new file mode 100644 index 0000000..b76dbd0 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/authentication/ForgotPasswordService.java @@ -0,0 +1,50 @@ +package com.iconplus.smartproc.service.authentication; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.ForgotPasswordRequest; +import com.iconplus.smartproc.repository.UsersRepository; +import com.iconplus.smartproc.service.CommonService; +import com.iconplus.smartproc.util.Constants; +import org.apache.commons.lang3.StringUtils; +import org.springframework.http.HttpStatus; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.stereotype.Service; + +@Service +public class ForgotPasswordService implements BaseService { + + private UsersRepository usersRepository; + private CommonService commonService; + public ForgotPasswordService(UsersRepository usersRepository, + CommonService commonService) { + this.usersRepository = usersRepository; + this.commonService = commonService; + } + + @Override + public EmptyResponse execute(ForgotPasswordRequest input) { + + var users = usersRepository.getUsersByEmailAndExpiredTime(input.getRememberId()) + .orElseThrow(() -> new BusinessException(Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "Remember-id", input.getRememberId()))); + + String newPassword = commonService.getPassword(input.getNewPassword()); + String confirmationPassword = commonService.getPassword(input.getConfirmationPassword()); + + if (!StringUtils.equalsIgnoreCase(newPassword, confirmationPassword)) { + throw new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10007, + Constants.ERR_TTL_10007, + Constants.ERR_MSG_10007); + } + + BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder(); + users.setPassword(bCryptPasswordEncoder.encode(newPassword)); + usersRepository.save(users); + + return new EmptyResponse(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/authentication/InitForgotPasswordService.java b/src/main/java/com/iconplus/smartproc/service/authentication/InitForgotPasswordService.java new file mode 100644 index 0000000..1b9d168 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/authentication/InitForgotPasswordService.java @@ -0,0 +1,46 @@ +package com.iconplus.smartproc.service.authentication; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.InitForgotPasswordRequest; +import com.iconplus.smartproc.model.response.InitForgotPasswordResponse; +import com.iconplus.smartproc.repository.UsersRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import java.sql.Timestamp; +import java.time.Instant; +import java.util.UUID; + +@Service +public class InitForgotPasswordService implements BaseService { + + @Value("${config.forgot-password.expired-time:1440}") + private Integer expiredTime; + + private final UsersRepository usersRepository; + + public InitForgotPasswordService(UsersRepository usersRepository) { + this.usersRepository = usersRepository; + } + + @Override + public InitForgotPasswordResponse execute(InitForgotPasswordRequest input) { + + var users = usersRepository.findByEmailAndIsDeleteFalse(input.getEmail()) + .orElseThrow(() -> new BusinessException(Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "User", input.getEmail()))); + + var expirationTime = Timestamp.from(Instant.now().plusMillis(expiredTime * (long) 60000)); + + users.setRememberId(UUID.randomUUID().toString()); + users.setExpiredTime(expirationTime); + usersRepository.save(users); + + return InitForgotPasswordResponse.builder() + .rememberId(users.getRememberId()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/authentication/LoginService.java b/src/main/java/com/iconplus/smartproc/service/authentication/LoginService.java new file mode 100644 index 0000000..761cac5 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/authentication/LoginService.java @@ -0,0 +1,189 @@ +package com.iconplus.smartproc.service.authentication; + +import com.iconplus.smartproc.configuration.JwtTokenUtil; +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.Menus; +import com.iconplus.smartproc.model.entity.TokenManagement; +import com.iconplus.smartproc.model.projection.MenusPermissionView; +import com.iconplus.smartproc.model.request.LoginRequest; +import com.iconplus.smartproc.model.response.LoginResponse; +import com.iconplus.smartproc.model.response.MenusPermissionResponse; +import com.iconplus.smartproc.model.response.MenusResponse; +import com.iconplus.smartproc.model.response.ParentMenusResponse; +import com.iconplus.smartproc.model.token.TokenContent; +import com.iconplus.smartproc.repository.MenusRepository; +import com.iconplus.smartproc.repository.PermissionRepository; +import com.iconplus.smartproc.repository.UsersRepository; +import com.iconplus.smartproc.service.CommonService; +import com.iconplus.smartproc.util.Constants; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.BooleanUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpStatus; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; + +@Service +@Slf4j +public class LoginService implements BaseService { + + @Value("${jwt.expired-time.access-token:15}") + private Integer accessTokenExp; + @Value("${jwt.expired-time.refresh-token:60}") + private Integer refreshTokenExp; + + private final UsersRepository usersRepository; + private final JwtTokenUtil jwtTokenUtil; + private final CommonService commonService; + private final MenusRepository menusRepository; + private final PermissionRepository permissionRepository; + + public LoginService(UsersRepository userRepository, + JwtTokenUtil jwtTokenUtil, + CommonService commonService, + MenusRepository menusRepository, + PermissionRepository permissionRepository) { + this.usersRepository = userRepository; + this.jwtTokenUtil = jwtTokenUtil; + this.commonService = commonService; + this.menusRepository = menusRepository; + this.permissionRepository = permissionRepository; + + } + + @Transactional + @Override + public LoginResponse execute(LoginRequest input) { + + var userRoleView= usersRepository.getByUsernameOrEmail(input.getEmail()) + .orElseThrow(() -> new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10003, + Constants.ERR_TTL_10003, + String.format(Constants.ERR_MSG_10003, input.getEmail()))); + + String password = commonService.getPassword(input.getPassword()); + BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder(); + boolean isValidPassword = bCryptPasswordEncoder.matches(password, userRoleView.getPassword()); + + if (!isValidPassword) { + throw new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10004, + Constants.ERR_TTL_10004, + Constants.ERR_MSG_10004); + } + Set accessMenu = new HashSet<>(); + List menusPermissionResponseList = new ArrayList<>(); + + + List parentMenusResponseList = new ArrayList<>(); + var parentMenu = menusRepository.findAllParentMenu(userRoleView.getRoleId()); + for (Menus menus : parentMenu) { + ParentMenusResponse parentMenusResponse = ParentMenusResponse.builder() + .id(menus.getId()) + .text(menus.getNama()) + .icon(menus.getIcon()) + .path(menus.getLink()) + .items(new ArrayList<>()) + .build(); + parentMenusResponseList.add(parentMenusResponse); + } + + var listMenusPermission = permissionRepository.getListMenusPermission(userRoleView.getRoleId()); + for (MenusPermissionView menusPermissionView : listMenusPermission) { + if (BooleanUtils.isTrue(menusPermissionView.getCanView()) || + BooleanUtils.isTrue(menusPermissionView.getCanCreate()) || + BooleanUtils.isTrue(menusPermissionView.getCanUpdate()) || + BooleanUtils.isTrue(menusPermissionView.getCanDelete()) || + BooleanUtils.isTrue(menusPermissionView.getCanRead())) { + accessMenu.add(menusPermissionView.getNama()); + + MenusPermissionResponse menusPermissionResponse = MenusPermissionResponse.builder() + .id(menusPermissionView.getId()) + .nama(menusPermissionView.getNama()) + .parentId(menusPermissionView.getParentId()) + .urutan(menusPermissionView.getUrutan()) + .icon(menusPermissionView.getIcon()) + .link(menusPermissionView.getLink()) + .canView(menusPermissionView.getCanView()) + .canRead(menusPermissionView.getCanRead()) + .canCreate(menusPermissionView.getCanCreate()) + .canUpdate(menusPermissionView.getCanUpdate()) + .canDelete(menusPermissionView.getCanDelete()) + .build(); + + menusPermissionResponseList.add(menusPermissionResponse); + } + } + + for (ParentMenusResponse parentMenusResponse : parentMenusResponseList) { + for (MenusPermissionResponse menusPermissionResponse : menusPermissionResponseList) { + if (parentMenusResponse.getId().equals(menusPermissionResponse.getParentId())) { + MenusResponse menusResponse = MenusResponse.builder() + .text(menusPermissionResponse.getNama()) + .path(menusPermissionResponse.getLink()) + .canView(menusPermissionResponse.getCanView()) + .canRead(menusPermissionResponse.getCanRead()) + .canCreate(menusPermissionResponse.getCanCreate()) + .canUpdate(menusPermissionResponse.getCanUpdate()) + .canDelete(menusPermissionResponse.getCanDelete()) + .build(); + parentMenusResponse.getItems().add(menusResponse); + + } + } + } + + var tokenContent = TokenContent.builder() + .userId(userRoleView.getId()) + .username(userRoleView.getUsername()) + .nama(userRoleView.getNama()) + .roleId(userRoleView.getRoleId()) + .role(userRoleView.getRole()) + .instansiId(userRoleView.getInstansiId()) + .instansi(userRoleView.getInstansi()) + .bidangId(userRoleView.getBidangId()) + .bidang(userRoleView.getBidang()) + .jabatanId(userRoleView.getJabatanId()) + .jabatan(userRoleView.getJabatan()) + .accessMenu(accessMenu) + .build(); + + Map claims = new HashMap<>(); + claims.put("userId", userRoleView.getId()); + + final String accessToken = jwtTokenUtil.generateToken(String.valueOf(userRoleView.getId()), tokenContent, accessTokenExp * 60000); + String refreshToken = jwtTokenUtil.doGenerateToken(claims, String.valueOf(userRoleView.getId()), refreshTokenExp * 60000); + + if (StringUtils.isBlank(accessToken) || StringUtils.isBlank(refreshToken)) { + log.error("token null"); + throw new BusinessException(Constants.ERR_CODE_10008, + Constants.ERR_TTL_10008, + Constants.ERR_MSG_10008); + } + + commonService.saveUserToken(TokenManagement.builder() + .userId(userRoleView.getId()) + .accessToken(accessToken) + .refreshToken(refreshToken) + .build(), accessTokenExp); + + return LoginResponse.builder() + .accessToken(accessToken) + .validity(accessTokenExp * 60) + .refreshToken(refreshToken) + .userId(userRoleView.getId()) + .username(userRoleView.getUsername()) + .nama(userRoleView.getNama()) + .telepon(userRoleView.getTelepon()) + .email(userRoleView.getEmail()) + .roleId(userRoleView.getRoleId()) + .role(userRoleView.getRole()) + .menus(parentMenusResponseList) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/authentication/LogoutService.java b/src/main/java/com/iconplus/smartproc/service/authentication/LogoutService.java new file mode 100644 index 0000000..d062620 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/authentication/LogoutService.java @@ -0,0 +1,43 @@ +package com.iconplus.smartproc.service.authentication; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.context.ApiContext; +import com.iconplus.smartproc.helper.model.EmptyRequest; +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.TokenManagement; +import com.iconplus.smartproc.repository.TokenManagementRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +@Service +public class LogoutService implements BaseService { + + private ApiContext apiContext; + private TokenManagementRepository tokenManagementRepository; + + public LogoutService(ApiContext apiContext, + TokenManagementRepository tokenManagementRepository) { + this.apiContext = apiContext; + this.tokenManagementRepository = tokenManagementRepository; + } + + @Override + public EmptyResponse execute(EmptyRequest input) { + + String accessToken = apiContext.getAuthorization(); + TokenManagement tokenManagement = getTokenManagement(accessToken); + tokenManagement.setIsDelete(true); + tokenManagementRepository.save(tokenManagement); + return new EmptyResponse(); + } + + private TokenManagement getTokenManagement(String accessToken) { + return tokenManagementRepository.findByAccessTokenAndIsDeleteFalse(accessToken) + .orElseThrow(() -> new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_40038, + Constants.ERR_TITLE_40038, + Constants.ERR_MESSAGE_40038)); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/authentication/PostCheckAccessTokenService.java b/src/main/java/com/iconplus/smartproc/service/authentication/PostCheckAccessTokenService.java new file mode 100644 index 0000000..5ccad2e --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/authentication/PostCheckAccessTokenService.java @@ -0,0 +1,54 @@ +package com.iconplus.smartproc.service.authentication; + +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.helper.service.TokenUtils; +import com.iconplus.smartproc.model.projection.TokenManagementView; +import com.iconplus.smartproc.model.request.PostAccessTokenRequest; +import com.iconplus.smartproc.model.response.PostAccessTokenResponse; +import com.iconplus.smartproc.repository.TokenManagementRepository; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.stream.Collectors; + +@Service +@Slf4j +public class PostCheckAccessTokenService implements BaseService { + + private TokenManagementRepository tokenManagementRepository; + + public PostCheckAccessTokenService(TokenManagementRepository tokenManagementRepository) { + this.tokenManagementRepository = tokenManagementRepository; + } + + @Override + public PostAccessTokenResponse execute(PostAccessTokenRequest input) { + + var decodeToken = TokenUtils.decodeToken(input.getAccessToken()); + Long userId = Long.valueOf(decodeToken.get("user_id")); + + List tokenManagementViews = tokenManagementRepository.findAccessTokenByUserIdAndDeletedFalse(userId); + if (tokenManagementViews.isEmpty()) { + log.error("access token not found in db"); + return PostAccessTokenResponse.builder() + .isValid(false) + .build(); + } + + List userTokenList = tokenManagementViews.stream() + .map(TokenManagementView::getAccessToken) + .collect(Collectors.toList()); + + boolean isMatch = userTokenList.stream().anyMatch(s -> s.equals(input.getAccessToken())); + if (isMatch) { + return PostAccessTokenResponse.builder() + .isValid(true) + .build(); + } + + return PostAccessTokenResponse.builder() + .isValid(false) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/authentication/TokenManagementService.java b/src/main/java/com/iconplus/smartproc/service/authentication/TokenManagementService.java new file mode 100644 index 0000000..32d5ab3 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/authentication/TokenManagementService.java @@ -0,0 +1,119 @@ +package com.iconplus.smartproc.service.authentication; + +import com.iconplus.smartproc.configuration.JwtTokenUtil; +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.helper.service.TokenUtils; +import com.iconplus.smartproc.model.entity.TokenManagement; +import com.iconplus.smartproc.model.request.RefreshTokenRequest; +import com.iconplus.smartproc.model.response.RefreshTokenResponse; +import com.iconplus.smartproc.model.token.TokenContent; +import com.iconplus.smartproc.repository.TokenManagementRepository; +import com.iconplus.smartproc.repository.UsersRepository; +import com.iconplus.smartproc.service.CommonService; +import com.iconplus.smartproc.util.Constants; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.HashSet; +import java.util.Objects; + +@Service +@Slf4j +public class TokenManagementService implements BaseService { + + @Value("${jwt.expired-time.access-token:15}") + private Integer accessTokenExp; + + private final TokenManagementRepository tokenManagementRepository; + private final UsersRepository usersRepository; + private final JwtTokenUtil jwtTokenUtil; + private final CommonService commonService; + + public TokenManagementService(TokenManagementRepository tokenManagementRepository, + JwtTokenUtil jwtTokenUtil, + UsersRepository usersRepository, + CommonService commonService) { + this.tokenManagementRepository = tokenManagementRepository; + this.jwtTokenUtil = jwtTokenUtil; + this.usersRepository = usersRepository; + this.commonService = commonService; + } + + @Transactional + @Override + public RefreshTokenResponse execute(RefreshTokenRequest input) { + + try { + jwtTokenUtil.validateTokenOnly(input.getRefreshToken()); + } catch (Exception e) { + throw new BusinessException(HttpStatus.UNAUTHORIZED, + Constants.ERR_CODE_40051, + Constants.TITLE_INVALID_NEXT_STEP, + Constants.REFRESH_TOKEN_EXPIRED); + } + + var decodeToken = TokenUtils.decodeToken(input.getRefreshToken()); + Long userId = Long.valueOf(decodeToken.get("userId")); + + TokenManagement tokenManagement = tokenManagementRepository.findByRefreshToken(input.getRefreshToken()) + .map(c -> verifyRefreshToken(c, userId)) + .orElseThrow(() -> { + log.error("failed validate token to existing db"); + return new BusinessException( + HttpStatus.UNAUTHORIZED, + Constants.ERR_CODE_80007, + Constants.TITLE_INVALID_NEXT_STEP, + Constants.REFRESH_TOKEN_NOT_VALID); + }); + + var userRoleView = usersRepository.getUserByIdAndDeletedFase(userId).orElseThrow(() -> new BusinessException("err", "err", "err")); + + var tokenContent = TokenContent.builder() + .userId(userRoleView.getId()) + .username(userRoleView.getUsername()) + .nama(userRoleView.getNama()) + .roleId(userRoleView.getRoleId()) + .role(userRoleView.getRole()) + .instansiId(userRoleView.getInstansiId()) + .instansi(userRoleView.getInstansi()) + .bidangId(userRoleView.getBidangId()) + .bidang(userRoleView.getBidang()) + .accessMenu(new HashSet<>()) + .build(); + + final String accessToken = jwtTokenUtil.generateToken(String.valueOf(userRoleView.getId()), tokenContent, accessTokenExp * 60000); + + if (StringUtils.isBlank(accessToken)) { + log.error("token null"); + throw new BusinessException(HttpStatus.UNAUTHORIZED, + Constants.ERR_CODE_40042, + Constants.ERR_TTL_40042, + Constants.ERR_MSG_40042); + } + + tokenManagement.setAccessToken(accessToken); + tokenManagement.setRefreshToken(input.getRefreshToken()); + commonService.saveUserToken(tokenManagement, accessTokenExp); + + return RefreshTokenResponse.builder() + .accessToken(accessToken) + .refreshToken(input.getRefreshToken()) + .validity(accessTokenExp * 60) + .build(); + } + + private TokenManagement verifyRefreshToken(TokenManagement tokenManagement, Long userId) { + if (!Objects.equals(userId, tokenManagement.getUserId())) { + throw new BusinessException(HttpStatus.UNAUTHORIZED, + Constants.ERR_CODE_80007, + Constants.TITLE_INVALID_NEXT_STEP, + Constants.REFRESH_TOKEN_NOT_VALID); + } + return tokenManagement; + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/bidang/DeleteBidangService.java b/src/main/java/com/iconplus/smartproc/service/bidang/DeleteBidangService.java new file mode 100644 index 0000000..ea692b1 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/bidang/DeleteBidangService.java @@ -0,0 +1,33 @@ +package com.iconplus.smartproc.service.bidang; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.BidangRequest; +import com.iconplus.smartproc.repository.BidangRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.stereotype.Service; + +@Service +public class DeleteBidangService implements BaseService { + + private BidangRepository bidangRepository; + + public DeleteBidangService (BidangRepository bidangRepository) { + this.bidangRepository = bidangRepository; + } + + @Override + public EmptyResponse execute(BidangRequest input) { + + var bidang = bidangRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "Bidang", input.getId()))); + + bidang.setIsDelete(true); + bidangRepository.save(bidang); + + return new EmptyResponse(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/bidang/GetBidangService.java b/src/main/java/com/iconplus/smartproc/service/bidang/GetBidangService.java new file mode 100644 index 0000000..5af72d6 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/bidang/GetBidangService.java @@ -0,0 +1,36 @@ +package com.iconplus.smartproc.service.bidang; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.BidangRequest; +import com.iconplus.smartproc.model.response.BidangResponse; +import com.iconplus.smartproc.repository.BidangRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.stereotype.Service; + +@Service +public class GetBidangService implements BaseService { + + private BidangRepository bidangRepository; + + public GetBidangService(BidangRepository bidangRepository) { + this.bidangRepository = bidangRepository; + } + + @Override + public BidangResponse execute(BidangRequest input) { + + var bidang = bidangRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "Bidang", input.getId()))); + + return BidangResponse.builder() + .id(bidang.getId()) + .instansiId(bidang.getInstansiId()) + .bidang(bidang.getBidang()) + .keterangan(bidang.getKeterangan()) + .isActive(bidang.getIsActive()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/bidang/GetListBidangService.java b/src/main/java/com/iconplus/smartproc/service/bidang/GetListBidangService.java new file mode 100644 index 0000000..e6bfa26 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/bidang/GetListBidangService.java @@ -0,0 +1,61 @@ +package com.iconplus.smartproc.service.bidang; + +import com.iconplus.smartproc.helper.model.Pagination; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.projection.BidangView; +import com.iconplus.smartproc.model.request.BidangRequest; +import com.iconplus.smartproc.model.response.BidangResponse; +import com.iconplus.smartproc.model.response.GetListBidangResponse; +import com.iconplus.smartproc.repository.BidangRepository; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class GetListBidangService implements BaseService { + + private BidangRepository bidangRepository; + + public GetListBidangService(BidangRepository bidangRepository) { + this.bidangRepository = bidangRepository; + } + + @Override + public GetListBidangResponse execute(BidangRequest input) { + validateRequest(input); + List bidangResponseList = new ArrayList<>(); + var bidangViews= bidangRepository.getListBidang(input.getSearch(), input.getPageable()); + + for (BidangView bidangView : bidangViews) { + BidangResponse bidangResponse = BidangResponse.builder() + .id(bidangView.getId()) + .instansiId(bidangView.getInstansiId()) + .instansi(bidangView.getInstansi()) + .bidang(bidangView.getBidang()) + .keterangan(bidangView.getKeterangan()) + .isActive(bidangView.getIsActive()) + .build(); + bidangResponseList.add(bidangResponse); + } + + return GetListBidangResponse.builder() + .data(bidangResponseList) + .pagination(Pagination.builder() + .pageSize(input.getPageable().getPageSize()) + .currentPage(input.getPageable().getPageNumber()) + .totalPages(bidangViews.getTotalPages()) + .totalRecords(bidangViews.getTotalElements()) + .isFirstPage(bidangViews.isFirst()) + .isLastPage(bidangViews.isLast()) + .build()) + .build(); + } + + private void validateRequest(BidangRequest input) { + if (StringUtils.isNotBlank(input.getSearch())) { + input.setSearch('%'+ input.getSearch().toUpperCase()+'%'); + } + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/bidang/PostCreateBidangService.java b/src/main/java/com/iconplus/smartproc/service/bidang/PostCreateBidangService.java new file mode 100644 index 0000000..a4a7409 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/bidang/PostCreateBidangService.java @@ -0,0 +1,48 @@ +package com.iconplus.smartproc.service.bidang; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.Bidang; +import com.iconplus.smartproc.model.request.BidangRequest; +import com.iconplus.smartproc.model.response.BidangResponse; +import com.iconplus.smartproc.repository.BidangRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +@Service +public class PostCreateBidangService implements BaseService { + + private BidangRepository bidangRepository; + + public PostCreateBidangService(BidangRepository bidangRepository) { + this.bidangRepository = bidangRepository; + } + + @Override + public BidangResponse execute(BidangRequest input) { + + var bidang = bidangRepository.findByBidangAndIsDeleteFalse(input.getBidang()); + if (bidang.isPresent()) { + throw new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10002, + Constants.ERR_TTL_10002, + String.format(Constants.ERR_MSG_10002, "Bidang", input.getBidang())); + } + + Bidang bidangEntity = Bidang.builder() + .id(input.getId()) + .instansiId(input.getInstansiId()) + .bidang(input.getBidang()) + .keterangan(input.getKeterangan()) + .isActive(input.getIsActive()) + .isDelete(false) + .build(); + + var result = bidangRepository.save(bidangEntity); + return BidangResponse.builder() + .id(result.getId()) + .build(); + + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/bidang/PutUpdateBidangService.java b/src/main/java/com/iconplus/smartproc/service/bidang/PutUpdateBidangService.java new file mode 100644 index 0000000..929ee1b --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/bidang/PutUpdateBidangService.java @@ -0,0 +1,37 @@ +package com.iconplus.smartproc.service.bidang; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.BidangRequest; +import com.iconplus.smartproc.model.response.BidangResponse; +import com.iconplus.smartproc.repository.BidangRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.stereotype.Service; + +@Service +public class PutUpdateBidangService implements BaseService { + + private BidangRepository bidangRepository; + + public PutUpdateBidangService(BidangRepository bidangRepository) { + this.bidangRepository = bidangRepository; + } + + @Override + public BidangResponse execute(BidangRequest input) { + + var bidang = bidangRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "Bidang", input.getId()))); + + bidang.setInstansiId(input.getInstansiId()); + bidang.setBidang(input.getBidang()); + bidang.setKeterangan(input.getKeterangan()); + bidang.setIsActive(input.getIsActive()); + var result = bidangRepository.save(bidang); + return BidangResponse.builder() + .id(result.getId()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/drp/DeleteDokumenUploadService.java b/src/main/java/com/iconplus/smartproc/service/drp/DeleteDokumenUploadService.java new file mode 100644 index 0000000..0f62c49 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/drp/DeleteDokumenUploadService.java @@ -0,0 +1,49 @@ +package com.iconplus.smartproc.service.drp; + +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.DrpDokumenRequest; +import com.iconplus.smartproc.repository.DrpDokumenRepository; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; + +@Service +@Slf4j +public class DeleteDokumenUploadService implements BaseService { + + @Value("${config.file-upload.rkap}") + private String pathFileUploadRkap; + + private final DrpDokumenRepository drpDokumenRepository; + + public DeleteDokumenUploadService(DrpDokumenRepository drpDokumenRepository) { + this.drpDokumenRepository = drpDokumenRepository; + } + + @Override + public EmptyResponse execute(DrpDokumenRequest input) { + + var drpDokumenOptional = drpDokumenRepository.findByFilenameAndIsDeleteFalse(input.getFilename()); + if (drpDokumenOptional.isPresent()) { + drpDokumenOptional.get().setIsDelete(true); + drpDokumenRepository.save(drpDokumenOptional.get()); + } + + Path path = Paths.get(pathFileUploadRkap + input.getFilename()); + + try { + Files.delete(path); + } catch (IOException e) { + log.info("no file found"); + } + + return new EmptyResponse(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/drp/EditUploadDokumenDrpService.java b/src/main/java/com/iconplus/smartproc/service/drp/EditUploadDokumenDrpService.java new file mode 100644 index 0000000..917d525 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/drp/EditUploadDokumenDrpService.java @@ -0,0 +1,76 @@ +package com.iconplus.smartproc.service.drp; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.DrpDokumenRequest; +import com.iconplus.smartproc.model.request.DrpRequest; +import com.iconplus.smartproc.model.response.DrpDokumenResponse; +import com.iconplus.smartproc.repository.DrpDokumenRepository; +import com.iconplus.smartproc.util.Constants; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; + +@Service +@Slf4j +public class EditUploadDokumenDrpService implements BaseService { + + @Value("${config.file-upload.rkap}") + private String pathFileUploadRkap; + + private final DrpDokumenRepository drpDokumenRepository; + + public EditUploadDokumenDrpService(DrpDokumenRepository drpDokumenRepository) { + this.drpDokumenRepository = drpDokumenRepository; + } + + @Override + public DrpDokumenResponse execute(DrpDokumenRequest input) { + + MultipartFile file = input.getFile(); + String newFilename = file.getOriginalFilename(); + + var drpDokumenOptional = drpDokumenRepository.findByFilenameAndIsDeleteFalse(input.getFilename()); + if (drpDokumenOptional.isPresent()) { + drpDokumenOptional.get().setDrpId(input.getDrpId()); + drpDokumenOptional.get().setJenisDokumenId(input.getJenisDokumenId()); + drpDokumenOptional.get().setFilename(newFilename); + drpDokumenOptional.get().setKeterangan(input.getKeterangan()); + drpDokumenRepository.save(drpDokumenOptional.get()); + } + + Path oldFile = Paths.get(pathFileUploadRkap + input.getFilename()); + try { + Files.delete(oldFile); + } catch (IOException e) { + log.info("no file found"); + } + + File path = new File(pathFileUploadRkap + newFilename); + + try { + FileOutputStream output = new FileOutputStream(path); + output.write(file.getBytes()); + output.close(); + } catch (Exception ex) { + throw new BusinessException(Constants.ERR_CODE_10012, + Constants.ERR_TTL_10012, + String.format(Constants.ERR_MSG_10012, pathFileUploadRkap)); + } + + return DrpDokumenResponse.builder() + .jenisDokumenId(input.getJenisDokumenId()) + .filename(newFilename) + .keterangan(input.getKeterangan()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/drp/GetDrpService.java b/src/main/java/com/iconplus/smartproc/service/drp/GetDrpService.java new file mode 100644 index 0000000..9045888 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/drp/GetDrpService.java @@ -0,0 +1,81 @@ +package com.iconplus.smartproc.service.drp; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.DrpDokumen; +import com.iconplus.smartproc.model.request.DrpRequest; +import com.iconplus.smartproc.model.response.DrpDokumenResponse; +import com.iconplus.smartproc.model.response.DrpResponse; +import com.iconplus.smartproc.repository.DrpDokumenRepository; +import com.iconplus.smartproc.repository.DrpPengadaanDokumenRepository; +import com.iconplus.smartproc.repository.DrpRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class GetDrpService implements BaseService { + + private final DrpRepository drpRepository; + private final DrpDokumenRepository drpDokumenRepository; + private final DrpPengadaanDokumenRepository drpPengadaanDokumenRepository; + + public GetDrpService(DrpRepository drpRepository, + DrpDokumenRepository drpDokumenRepository, + DrpPengadaanDokumenRepository drpPengadaanDokumenRepository) { + this.drpRepository = drpRepository; + this.drpDokumenRepository = drpDokumenRepository; + this.drpPengadaanDokumenRepository = drpPengadaanDokumenRepository; + } + + @Override + public DrpResponse execute(DrpRequest input) { + var drp = drpRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "DRP", input.getId()))); + + List drpDokumenResponseList = new ArrayList<>(); + List drpPengadaanDokumenPendukungList = new ArrayList<>(); + setDrpDokumen(input, drpDokumenResponseList, drpPengadaanDokumenPendukungList); + + + return DrpResponse.builder() + .id(drp.getId()) + .tahun(drp.getTahun()) + .approveStatus(drp.getApproveStatus()) + .approveDate(drp.getApproveDate()) + .isActive(drp.getIsActive()) + .isDelete(drp.getIsDelete()) + .dataDrpDokumen(drpDokumenResponseList) + .dataDrpDokumenPendukung(drpPengadaanDokumenPendukungList) + .build(); + } + + private void setDrpDokumen(DrpRequest input, List drpDokumenResponseList, List drpDokumenPendukungList) { + var drpDokumenList = drpDokumenRepository.findByDrpIdAndIsDeleteFalse(input.getId()); + + for (DrpDokumen drpDokumen : drpDokumenList) { + + if (drpDokumen.getJenisDokumenId() == 1) { + DrpDokumenResponse drpDokumenResponse = DrpDokumenResponse.builder() + .id(drpDokumen.getId()) + .drpId(drpDokumen.getDrpId()) + .jenisDokumenId(drpDokumen.getJenisDokumenId()) + .filename(drpDokumen.getFilename()) + .build(); + drpDokumenResponseList.add(drpDokumenResponse); + } else { + DrpDokumenResponse drpDokumenResponse = DrpDokumenResponse.builder() + .id(drpDokumen.getId()) + .drpId(drpDokumen.getDrpId()) + .jenisDokumenId(drpDokumen.getJenisDokumenId()) + .filename(drpDokumen.getFilename()) + .build(); + drpDokumenPendukungList.add(drpDokumenResponse); + } + } + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/drp/GetListDrpRekomendasiService.java b/src/main/java/com/iconplus/smartproc/service/drp/GetListDrpRekomendasiService.java new file mode 100644 index 0000000..b539ab0 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/drp/GetListDrpRekomendasiService.java @@ -0,0 +1,75 @@ +package com.iconplus.smartproc.service.drp; + +import com.iconplus.smartproc.helper.model.Pagination; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.projection.DrpRekomendasiView; +import com.iconplus.smartproc.model.request.DrpRekomendasiRequest; +import com.iconplus.smartproc.model.response.DrpRekomendasiResponse; +import com.iconplus.smartproc.model.response.GetListDrpRekomendasiResponse; +import com.iconplus.smartproc.repository.DrpRekomendasiRepository; +import com.iconplus.smartproc.util.Constants; +import org.apache.commons.lang3.BooleanUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class GetListDrpRekomendasiService implements BaseService { + + private final DrpRekomendasiRepository drpRekomendasiRepository; + + public GetListDrpRekomendasiService(DrpRekomendasiRepository drpRekomendasiRepository) { + this.drpRekomendasiRepository = drpRekomendasiRepository; + } + + + @Override + public GetListDrpRekomendasiResponse execute(DrpRekomendasiRequest input) { + + List drpRekomendasiResponseList = new ArrayList<>(); + var listDrpRekomendasi = drpRekomendasiRepository.getListDrpRekomendasiByDrpId(input.getDrpId(), input.getPageable()); + for (DrpRekomendasiView drpRekomendasiView : listDrpRekomendasi) { + DrpRekomendasiResponse drpRekomendasiResponse = DrpRekomendasiResponse.builder() + .id(drpRekomendasiView.getId()) + .nomorRkp(drpRekomendasiView.getNomor()) + .namaPengadaan(drpRekomendasiView.getNamaPengadaan()) + .jabatan(drpRekomendasiView.getJabatan()) + .rekomendasi(drpRekomendasiView.getRekomendasi()) + .rekomendasiDate(drpRekomendasiView.getRekomendasiDate()) + .build(); + + if (drpRekomendasiView.getIsApprove() != null) { + if (BooleanUtils.isTrue(drpRekomendasiView.getIsApprove())) { + drpRekomendasiResponse.setStatus("Setuju"); + } else { + drpRekomendasiResponse.setStatus("Tolak"); + } + + if (StringUtils.equalsIgnoreCase("VP", drpRekomendasiView.getLevel())) { + drpRekomendasiResponse.setApproval(Constants.STATUS_APPROVAL_VP); + } else if (StringUtils.equalsIgnoreCase("KOMITE", drpRekomendasiView.getLevel())) { + drpRekomendasiResponse.setApproval(Constants.STATUS_REKOMENDASI_KOMITE); + } else { + drpRekomendasiResponse.setApproval(Constants.STATUS_APPROVAL_DIRUT); + } + } + + drpRekomendasiResponseList.add(drpRekomendasiResponse); + } + + return GetListDrpRekomendasiResponse.builder() + .data(drpRekomendasiResponseList) + .pagination(Pagination.builder() + .pageSize(input.getPageable().getPageSize()) + .currentPage(input.getPageable().getPageNumber()) + .totalPages(listDrpRekomendasi.getTotalPages()) + .totalRecords(listDrpRekomendasi.getTotalElements()) + .isFirstPage(listDrpRekomendasi.isFirst()) + .isLastPage(listDrpRekomendasi.isLast()) + .build()) + .build(); + } + +} diff --git a/src/main/java/com/iconplus/smartproc/service/drp/GetListDrpService.java b/src/main/java/com/iconplus/smartproc/service/drp/GetListDrpService.java new file mode 100644 index 0000000..51f015c --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/drp/GetListDrpService.java @@ -0,0 +1,55 @@ +package com.iconplus.smartproc.service.drp; + +import com.iconplus.smartproc.helper.model.Pagination; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.projection.DrpView; +import com.iconplus.smartproc.model.request.DrpRequest; +import com.iconplus.smartproc.model.response.DrpResponse; +import com.iconplus.smartproc.model.response.GetListDrpResponse; +import com.iconplus.smartproc.repository.DrpRepository; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class GetListDrpService implements BaseService { + + private final DrpRepository drpRepository; + + public GetListDrpService(DrpRepository drpRepository) { + this.drpRepository = drpRepository; + } + + @Override + public GetListDrpResponse execute(DrpRequest input) { + + List drpResponseList = new ArrayList<>(); + + var drpViews = drpRepository.findByIsDeleteFalse(input.getApproveDate(), input.getPageable()); + for (DrpView drpView : drpViews) { + DrpResponse drpResponse = DrpResponse.builder() + .id(drpView.getId()) + .tahun(drpView.getTahun()) + .approveStatus(drpView.getApproveStatus()) + .approveDate(drpView.getApproveDate()) + .totalPengadaan(drpView.getTotalPengadaan()) + .isActive(drpView.getIsActive()) + .isDelete(drpView.getIsDelete()) + .build(); + drpResponseList.add(drpResponse); + } + + return GetListDrpResponse.builder() + .data(drpResponseList) + .pagination(Pagination.builder() + .pageSize(input.getPageable().getPageSize()) + .currentPage(input.getPageable().getPageNumber()) + .totalPages(drpViews.getTotalPages()) + .totalRecords(drpViews.getTotalElements()) + .isFirstPage(drpViews.isFirst()) + .isLastPage(drpViews.isLast()) + .build()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/drp/PostCreateDrpService.java b/src/main/java/com/iconplus/smartproc/service/drp/PostCreateDrpService.java new file mode 100644 index 0000000..4cb2544 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/drp/PostCreateDrpService.java @@ -0,0 +1,60 @@ +package com.iconplus.smartproc.service.drp; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.DrpDokumen; +import com.iconplus.smartproc.model.request.DrpDokumenRequest; +import com.iconplus.smartproc.model.request.DrpRequest; +import com.iconplus.smartproc.model.response.DrpResponse; +import com.iconplus.smartproc.repository.DrpDokumenRepository; +import com.iconplus.smartproc.repository.DrpRepository; +import com.iconplus.smartproc.util.Constants; +import org.apache.commons.lang3.ObjectUtils; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class PostCreateDrpService implements BaseService { + + private final DrpRepository drpRepository; + private final DrpDokumenRepository drpDokumenRepository; + + public PostCreateDrpService (DrpRepository drpRepository, + DrpDokumenRepository drpDokumenRepository) { + this.drpRepository = drpRepository; + this.drpDokumenRepository = drpDokumenRepository; + } + + @Override + public DrpResponse execute(DrpRequest input) { + + var drp = drpRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "DRP", input.getId()))); + + + List drpDokumenList = new ArrayList<>(); + if (ObjectUtils.isNotEmpty(input.getDataDrpDokumen())) { + for (DrpDokumenRequest drpDokumenRequest : input.getDataDrpDokumen()) { + DrpDokumen drpDokumen = DrpDokumen.builder() + .drpId(drp.getId()) + .jenisDokumenId(drpDokumenRequest.getJenisDokumenId()) + .filename(drpDokumenRequest.getFilename()) + .keterangan(drpDokumenRequest.getKeterangan()) + .isDelete(false) + .build(); + drpDokumenList.add(drpDokumen); + } + + } + + drpDokumenRepository.saveAll(drpDokumenList); + + return DrpResponse.builder() + .id(drp.getId()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/drp/PostCreateTahunDrpService.java b/src/main/java/com/iconplus/smartproc/service/drp/PostCreateTahunDrpService.java new file mode 100644 index 0000000..05e89f4 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/drp/PostCreateTahunDrpService.java @@ -0,0 +1,46 @@ +package com.iconplus.smartproc.service.drp; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.Drp; +import com.iconplus.smartproc.model.request.DrpRequest; +import com.iconplus.smartproc.model.response.DrpResponse; +import com.iconplus.smartproc.repository.DrpRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.stereotype.Service; + +import java.util.Optional; + +@Service +public class PostCreateTahunDrpService implements BaseService { + + private DrpRepository drpRepository; + public PostCreateTahunDrpService(DrpRepository drpRepository) { + this.drpRepository = drpRepository; + } + + @Override + public DrpResponse execute(DrpRequest input) { + validateTahunDrp(input); + + Drp drp = Drp.builder() + .tahun(input.getTahun()) + .approveStatus(Constants.STATUS_PENYUSUNAN) + .isDelete(false) + .build(); + + var result = drpRepository.save(drp); + return DrpResponse.builder() + .id(result.getId()) + .build(); + } + + private void validateTahunDrp(DrpRequest input) { + Optional drpOptional = drpRepository.findByTahunAndIsDeleteFalse(input.getTahun()); + if (drpOptional.isPresent()) { + throw new BusinessException(Constants.ERR_CODE_10010, + Constants.ERR_TTL_10010, + Constants.ERR_MSG_10010); + } + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/drp/PostDrpUploadDokumenRKAPService.java b/src/main/java/com/iconplus/smartproc/service/drp/PostDrpUploadDokumenRKAPService.java new file mode 100644 index 0000000..ce70460 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/drp/PostDrpUploadDokumenRKAPService.java @@ -0,0 +1,59 @@ +package com.iconplus.smartproc.service.drp; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.DrpDokumenRequest; +import com.iconplus.smartproc.model.response.DrpDokumenResponse; +import com.iconplus.smartproc.repository.DrpDokumenRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; + +@Service +public class PostDrpUploadDokumenRKAPService implements BaseService { + + @Value("${config.file-upload.rkap}") + private String pathFileUploadRkap; + + private final DrpDokumenRepository drpDokumenRepository; + public PostDrpUploadDokumenRKAPService(DrpDokumenRepository drpDokumenRepository) { + this.drpDokumenRepository = drpDokumenRepository; + } + + @Override + public DrpDokumenResponse execute(DrpDokumenRequest input) throws IOException { + + MultipartFile file = input.getFile(); + String fileName = file.getOriginalFilename(); + + var drpDokumen= drpDokumenRepository.findByFilenameAndIsDeleteFalse(fileName); + if (drpDokumen.isPresent()) { + throw new BusinessException(Constants.ERR_CODE_10002, + Constants.ERR_TTL_10002, + String.format(Constants.ERR_MSG_10002, "Filename", fileName)); + } + + File path = new File(pathFileUploadRkap + fileName); + + try { + FileOutputStream output = new FileOutputStream(path); + output.write(file.getBytes()); + output.close(); + } catch (Exception ex) { + throw new BusinessException(Constants.ERR_CODE_10012, + Constants.ERR_TTL_10012, + String.format(Constants.ERR_MSG_10012, pathFileUploadRkap)); + } + + return DrpDokumenResponse.builder() + .jenisDokumenId(input.getJenisDokumenId()) + .filename(fileName) + .keterangan(input.getKeterangan()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/drppengadaan/DeleteDokumenPendukungService.java b/src/main/java/com/iconplus/smartproc/service/drppengadaan/DeleteDokumenPendukungService.java new file mode 100644 index 0000000..5449295 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/drppengadaan/DeleteDokumenPendukungService.java @@ -0,0 +1,46 @@ +package com.iconplus.smartproc.service.drppengadaan; + +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.DrpPengadaanDokumenRequest; +import com.iconplus.smartproc.repository.DrpPengadaanDokumenRepository; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; + +@Service +@Slf4j +public class DeleteDokumenPendukungService implements BaseService { + + @Value("${config.file-upload.pendukung}") + private String pathFileUploadPendukung; + + private final DrpPengadaanDokumenRepository drpPengadaanDokumenRepository; + public DeleteDokumenPendukungService(DrpPengadaanDokumenRepository drpPengadaanDokumenRepository) { + this.drpPengadaanDokumenRepository = drpPengadaanDokumenRepository; + } + @Override + public EmptyResponse execute(DrpPengadaanDokumenRequest input) { + + var drpPengadaanDokumenOptional= drpPengadaanDokumenRepository.findByFilenameAndIsDeleteFalse(input.getFilename()); + if (drpPengadaanDokumenOptional.isPresent()) { + drpPengadaanDokumenOptional.get().setIsDelete(true); + drpPengadaanDokumenRepository.save(drpPengadaanDokumenOptional.get()); + } + + Path path = Paths.get(pathFileUploadPendukung + input.getFilename()); + + try { + Files.delete(path); + } catch (IOException e) { + log.info("no file found"); + } + + return new EmptyResponse(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/drppengadaan/DeleteDrpPengadaanService.java b/src/main/java/com/iconplus/smartproc/service/drppengadaan/DeleteDrpPengadaanService.java new file mode 100644 index 0000000..d379d84 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/drppengadaan/DeleteDrpPengadaanService.java @@ -0,0 +1,32 @@ +package com.iconplus.smartproc.service.drppengadaan; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.DrpPengadaanRequest; +import com.iconplus.smartproc.repository.DrpPengadaanRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.stereotype.Service; + + +@Service +public class DeleteDrpPengadaanService implements BaseService { + + private DrpPengadaanRepository drpPengadaanRepository; + public DeleteDrpPengadaanService(DrpPengadaanRepository drpPengadaanRepository) { + this.drpPengadaanRepository = drpPengadaanRepository; + } + + @Override + public EmptyResponse execute(DrpPengadaanRequest input) { + + var drpPengadaan = drpPengadaanRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "DRP", input.getId()))); + + drpPengadaan.setIsDelete(true); + drpPengadaanRepository.save(drpPengadaan); + return new EmptyResponse(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/drppengadaan/EditUploadDrpPengadaanService.java b/src/main/java/com/iconplus/smartproc/service/drppengadaan/EditUploadDrpPengadaanService.java new file mode 100644 index 0000000..baa3cd9 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/drppengadaan/EditUploadDrpPengadaanService.java @@ -0,0 +1,72 @@ +package com.iconplus.smartproc.service.drppengadaan; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.DrpPengadaanDokumenRequest; +import com.iconplus.smartproc.model.response.DrpPengadaanDokumenResponse; +import com.iconplus.smartproc.repository.DrpPengadaanDokumenRepository; +import com.iconplus.smartproc.util.Constants; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; + +@Service +@Slf4j +public class EditUploadDrpPengadaanService implements BaseService { + + @Value("${config.file-upload.pendukung}") + private String pathFileUploadPendukung; + + private final DrpPengadaanDokumenRepository drpPengadaanDokumenRepository; + public EditUploadDrpPengadaanService(DrpPengadaanDokumenRepository drpPengadaanDokumenRepository) { + this.drpPengadaanDokumenRepository = drpPengadaanDokumenRepository; + } + + @Override + public DrpPengadaanDokumenResponse execute(DrpPengadaanDokumenRequest input) { + MultipartFile file = input.getFile(); + String newFilename = file.getOriginalFilename(); + + var drpDokumenOptional = drpPengadaanDokumenRepository.findByFilenameAndIsDeleteFalse(input.getFilename()); + if (drpDokumenOptional.isPresent()) { + drpDokumenOptional.get().setDrpId(input.getDrpId()); + drpDokumenOptional.get().setJenisDokumenId(input.getJenisDokumenId()); + drpDokumenOptional.get().setFilename(newFilename); + drpDokumenOptional.get().setKeterangan(input.getKeterangan()); + drpPengadaanDokumenRepository.save(drpDokumenOptional.get()); + } + + Path oldFile = Paths.get(pathFileUploadPendukung + input.getFilename()); + try { + Files.delete(oldFile); + } catch (IOException e) { + log.info("no file found"); + } + + File path = new File(pathFileUploadPendukung + newFilename); + + try { + FileOutputStream output = new FileOutputStream(path); + output.write(file.getBytes()); + output.close(); + } catch (Exception ex) { + throw new BusinessException(Constants.ERR_CODE_10012, + Constants.ERR_TTL_10012, + String.format(Constants.ERR_MSG_10012, pathFileUploadPendukung)); + } + + return DrpPengadaanDokumenResponse.builder() + .jenisDokumenId(input.getJenisDokumenId()) + .filename(newFilename) + .keterangan(input.getKeterangan()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/drppengadaan/GetDrpPengadaanService.java b/src/main/java/com/iconplus/smartproc/service/drppengadaan/GetDrpPengadaanService.java new file mode 100644 index 0000000..9180b9c --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/drppengadaan/GetDrpPengadaanService.java @@ -0,0 +1,85 @@ +package com.iconplus.smartproc.service.drppengadaan; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.DrpPengadaanDokumen; +import com.iconplus.smartproc.model.request.DrpPengadaanRequest; +import com.iconplus.smartproc.model.response.DrpPengadaanDokumenResponse; +import com.iconplus.smartproc.model.response.DrpPengadaanResponse; +import com.iconplus.smartproc.repository.DrpPengadaanDokumenRepository; +import com.iconplus.smartproc.repository.DrpPengadaanRepository; +import com.iconplus.smartproc.util.Constants; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +@Service +@Slf4j +public class GetDrpPengadaanService implements BaseService { + + private final DrpPengadaanRepository drpPengadaanRepository; + private final DrpPengadaanDokumenRepository drpPengadaanDokumenRepository; + + public GetDrpPengadaanService(DrpPengadaanRepository drpPengadaanRepository, + DrpPengadaanDokumenRepository drpPengadaanDokumenRepository) { + this.drpPengadaanRepository = drpPengadaanRepository; + this.drpPengadaanDokumenRepository = drpPengadaanDokumenRepository; + } + + @Override + public DrpPengadaanResponse execute(DrpPengadaanRequest input) { + + var drpPengadaan = drpPengadaanRepository.getDrpPengadaanById(input.getId()) + .orElseThrow(() -> new BusinessException(Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "DRP Pengadaan", input.getId()))); + + List drpPengadaanDokumenResponseList = new ArrayList<>(); + var drpPengadaanDokumenList = drpPengadaanDokumenRepository.findByDrpPengadaanIdAndIsDeleteFalse(drpPengadaan.getId()); + for (DrpPengadaanDokumen drpPengadaanDokumen : drpPengadaanDokumenList) { + DrpPengadaanDokumenResponse drpPengadaanDokumenResponse = DrpPengadaanDokumenResponse.builder() + .id(drpPengadaanDokumen.getId()) + .drpId(drpPengadaanDokumen.getDrpId()) + .jenisDokumenId(drpPengadaanDokumen.getJenisDokumenId()) + .filename(drpPengadaanDokumen.getFilename()) + .keterangan(drpPengadaanDokumen.getKeterangan()) + .build(); + drpPengadaanDokumenResponseList.add(drpPengadaanDokumenResponse); + } + + + return DrpPengadaanResponse.builder() + .id(drpPengadaan.getId()) + .drpId(drpPengadaan.getDrpId()) + .nomor(drpPengadaan.getNomor()) + .namaPengadaan(drpPengadaan.getNamaPengadaan()) + .lokasiId(drpPengadaan.getLokasiId()) + .lokasi(drpPengadaan.getLokasi()) + .jenisPengadaanId(drpPengadaan.getJenisPengadaanId()) + .jenisPengadaan(drpPengadaan.getJenisPengadaan()) + .unitInisiatorId(drpPengadaan.getUnitInisiatorId()) + .unitInisiator(drpPengadaan.getUnitInisiator()) + .hpe(drpPengadaan.getHpe()) + .pagu(drpPengadaan.getPagu()) + .sumberDanaId(drpPengadaan.getSumberDanaId()) + .sumberDana(drpPengadaan.getSumberDana()) + .metodePengadaanId(drpPengadaan.getMetodePengadaanId()) + .metodePengadaan(drpPengadaan.getMetodePengadaan()) + .supplyPositioningMatrixId(drpPengadaan.getSupplyPositioningMatrixId()) + .supplyPositioningMatrix(drpPengadaan.getSupplyPositioningMatrix()) + .metodePenyampaianId(drpPengadaan.getMetodePenyampaianId()) + .metodePenyampaian(drpPengadaan.getMetodePenyampaian()) + .jenisKontrakId(drpPengadaan.getJenisKontrakId()) + .jenisKontrak(drpPengadaan.getJenisKontrak()) + .strategiPengadaanId(drpPengadaan.getStrategiPengadaanId()) + .strategiPengadaan(drpPengadaan.getStrategiPengadaan()) + .rencanaTanggal(drpPengadaan.getRencanaTanggal()) + .targetTanggal(drpPengadaan.getTargetTanggal()) + .isActive(drpPengadaan.getIsActive()) + .dataDrpPengadaanDokumen(drpPengadaanDokumenResponseList) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/drppengadaan/GetListDrpPengadaanService.java b/src/main/java/com/iconplus/smartproc/service/drppengadaan/GetListDrpPengadaanService.java new file mode 100644 index 0000000..87f13fd --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/drppengadaan/GetListDrpPengadaanService.java @@ -0,0 +1,75 @@ +package com.iconplus.smartproc.service.drppengadaan; + +import com.iconplus.smartproc.helper.model.Pagination; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.projection.DrpPengadaanView; +import com.iconplus.smartproc.model.request.DrpPengadaanRequest; +import com.iconplus.smartproc.model.response.DrpPengadaanResponse; +import com.iconplus.smartproc.model.response.GetListDrpPengadaanResponse; +import com.iconplus.smartproc.repository.DrpPengadaanRepository; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class GetListDrpPengadaanService implements BaseService { + + private final DrpPengadaanRepository drpPengadaanRepository; + + public GetListDrpPengadaanService(DrpPengadaanRepository drpPengadaanRepository) { + this.drpPengadaanRepository = drpPengadaanRepository; + } + + @Override + public GetListDrpPengadaanResponse execute(DrpPengadaanRequest input) { + + List drpPengadaanResponseList = new ArrayList<>(); + + var drpPengadaanViews = drpPengadaanRepository.getListDrpPengadaan(input.getDrpId(), input.getPageable()); + for (DrpPengadaanView drpPengadaanView : drpPengadaanViews) { + DrpPengadaanResponse drpPengadaanResponse = DrpPengadaanResponse.builder() + .id(drpPengadaanView.getId()) + .drpId(drpPengadaanView.getDrpId()) + .namaPengadaan(drpPengadaanView.getNamaPengadaan()) + .nomor(drpPengadaanView.getNomor()) + .hpe(drpPengadaanView.getHpe()) + .isActive(drpPengadaanView.getIsActive()) + .pagu(drpPengadaanView.getPagu()) + .rencanaTanggal(drpPengadaanView.getRencanaTanggal()) + .targetTanggal(drpPengadaanView.getTargetTanggal()) + .jenisPengadaanId(drpPengadaanView.getJenisPengadaanId()) + .jenisPengadaan(drpPengadaanView.getJenisPengadaan()) + .jenisKontrakId(drpPengadaanView.getJenisKontrakId()) + .jenisKontrak(drpPengadaanView.getJenisKontrak()) + .metodePengadaanId(drpPengadaanView.getMetodePengadaanId()) + .metodePengadaan(drpPengadaanView.getMetodePengadaan()) + .lokasiId(drpPengadaanView.getLokasiId()) + .lokasi(drpPengadaanView.getLokasi()) + .metodePenyampaianId(drpPengadaanView.getMetodePenyampaianId()) + .metodePenyampaian(drpPengadaanView.getMetodePenyampaian()) + .unitInisiatorId(drpPengadaanView.getUnitInisiatorId()) + .unitInisiator(drpPengadaanView.getUnitInisiator()) + .strategiPengadaanId(drpPengadaanView.getStrategiPengadaanId()) + .strategiPengadaan(drpPengadaanView.getStrategiPengadaan()) + .supplyPositioningMatrixId(drpPengadaanView.getSupplyPositioningMatrixId()) + .supplyPositioningMatrix(drpPengadaanView.getSupplyPositioningMatrix()) + .sumberDanaId(drpPengadaanView.getSumberDanaId()) + .sumberDana(drpPengadaanView.getSumberDana()) + .build(); + drpPengadaanResponseList.add(drpPengadaanResponse); + } + + return GetListDrpPengadaanResponse.builder() + .data(drpPengadaanResponseList) + .pagination(Pagination.builder() + .pageSize(input.getPageable().getPageSize()) + .currentPage(input.getPageable().getPageNumber()) + .totalPages(drpPengadaanViews.getTotalPages()) + .totalRecords(drpPengadaanViews.getTotalElements()) + .isFirstPage(drpPengadaanViews.isFirst()) + .isLastPage(drpPengadaanViews.isLast()) + .build()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/drppengadaan/PostCreateDrpPengadaanService.java b/src/main/java/com/iconplus/smartproc/service/drppengadaan/PostCreateDrpPengadaanService.java new file mode 100644 index 0000000..7b78807 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/drppengadaan/PostCreateDrpPengadaanService.java @@ -0,0 +1,78 @@ +package com.iconplus.smartproc.service.drppengadaan; + +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.DrpPengadaan; +import com.iconplus.smartproc.model.entity.DrpPengadaanDokumen; +import com.iconplus.smartproc.model.request.DrpPengadaanDokumenRequest; +import com.iconplus.smartproc.model.request.DrpPengadaanRequest; +import com.iconplus.smartproc.model.response.DrpPengadaanResponse; +import com.iconplus.smartproc.repository.DrpPengadaanDokumenRepository; +import com.iconplus.smartproc.repository.DrpPengadaanRepository; +import org.apache.commons.lang3.ObjectUtils; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class PostCreateDrpPengadaanService implements BaseService { + + private final DrpPengadaanRepository drpPengadaanRepository; + private final DrpPengadaanDokumenRepository drpPengadaanDokumenRepository; + + public PostCreateDrpPengadaanService(DrpPengadaanRepository drpPengadaanRepository, + DrpPengadaanDokumenRepository drpPengadaanDokumenRepository) { + this.drpPengadaanRepository = drpPengadaanRepository; + this.drpPengadaanDokumenRepository = drpPengadaanDokumenRepository; + } + + @Override + public DrpPengadaanResponse execute(DrpPengadaanRequest input) { + + DrpPengadaan drpPengadaan = DrpPengadaan.builder() + .drpId(input.getDrpId()) + .nomor(input.getNomor()) + .namaPengadaan(input.getNamaPengadaan()) + .lokasiId(input.getLokasiId()) + .jenisPengadaanId(input.getJenisPengadaanId()) + .unitInisiatorId(input.getUnitInisiatorId()) + .pagu(input.getPagu()) + .sumberDanaId(input.getSumberDanaId()) + .supplyPositioningMatrixId(input.getSupplyPositioningMatrixId()) + .metodePengadaanId(input.getMetodePengadaanId()) + .metodePenyampaianId(input.getMetodePenyampaianId()) + .jenisKontrakId(input.getJenisKontrakId()) + .strategiPengadaanId(input.getStrategiPengadaanId()) + .rencanaTanggal(input.getRencanaTanggal()) + .targetTanggal(input.getTargetTanggal()) + .hpe(input.getHpe()) + .isActive(input.getIsActive()) + .isDelete(false) + .build(); + + var result = drpPengadaanRepository.save(drpPengadaan); + + List drpPengadaanDokumenList = new ArrayList<>(); + if (ObjectUtils.isNotEmpty(input.getDataDrpPengadaanDokumen())) { + for (DrpPengadaanDokumenRequest drpPengadaanDokumenRequest : input.getDataDrpPengadaanDokumen()) { + DrpPengadaanDokumen drpPengadaanDokumen = DrpPengadaanDokumen.builder() + .drpPengadaanId(result.getId()) + .drpId(input.getDrpId()) + .jenisDokumenId(drpPengadaanDokumenRequest.getJenisDokumenId()) + .filename(drpPengadaanDokumenRequest.getFilename()) + .keterangan(drpPengadaanDokumenRequest.getKeterangan()) + .isDelete(false) + .build(); + drpPengadaanDokumenList.add(drpPengadaanDokumen); + } + } + + drpPengadaanDokumenRepository.saveAll(drpPengadaanDokumenList); + + return DrpPengadaanResponse.builder() + .id(result.getId()) + .build(); + + } + +} diff --git a/src/main/java/com/iconplus/smartproc/service/drppengadaan/PostDrpUploadDokumenPendukungService.java b/src/main/java/com/iconplus/smartproc/service/drppengadaan/PostDrpUploadDokumenPendukungService.java new file mode 100644 index 0000000..de28b1a --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/drppengadaan/PostDrpUploadDokumenPendukungService.java @@ -0,0 +1,60 @@ +package com.iconplus.smartproc.service.drppengadaan; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.DrpPengadaanDokumenRequest; +import com.iconplus.smartproc.model.response.DrpPengadaanDokumenResponse; +import com.iconplus.smartproc.repository.DrpPengadaanDokumenRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; + +@Service +public class PostDrpUploadDokumenPendukungService implements BaseService { + + @Value("${config.file-upload.pendukung}") + private String pathFileUploadPendukung; + + private final DrpPengadaanDokumenRepository drpPengadaanDokumenRepository; + public PostDrpUploadDokumenPendukungService(DrpPengadaanDokumenRepository drpPengadaanDokumenRepository) { + this.drpPengadaanDokumenRepository = drpPengadaanDokumenRepository; + } + + @Override + public DrpPengadaanDokumenResponse execute(DrpPengadaanDokumenRequest input) throws IOException { + + MultipartFile file = input.getFile(); + String fileName = file.getOriginalFilename(); + + var drpDokumen= drpPengadaanDokumenRepository.findByFilenameAndIsDeleteFalse(fileName); + if (drpDokumen.isPresent()) { + throw new BusinessException(Constants.ERR_CODE_10002, + Constants.ERR_TTL_10002, + String.format(Constants.ERR_MSG_10002, "Filename", fileName)); + } + + File path = new File(pathFileUploadPendukung + fileName); + + try { + FileOutputStream output = new FileOutputStream(path); + output.write(file.getBytes()); + output.close(); + } catch (Exception ex) { + throw new BusinessException(Constants.ERR_CODE_10012, + Constants.ERR_TTL_10012, + String.format(Constants.ERR_MSG_10012, pathFileUploadPendukung)); + } + + + return DrpPengadaanDokumenResponse.builder() + .jenisDokumenId(input.getJenisDokumenId()) + .filename(fileName) + .keterangan(input.getKeterangan()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/drppengadaan/PutDrpPengadaanService.java b/src/main/java/com/iconplus/smartproc/service/drppengadaan/PutDrpPengadaanService.java new file mode 100644 index 0000000..1bdb74f --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/drppengadaan/PutDrpPengadaanService.java @@ -0,0 +1,86 @@ +package com.iconplus.smartproc.service.drppengadaan; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.DrpPengadaanDokumen; +import com.iconplus.smartproc.model.request.DrpPengadaanDokumenRequest; +import com.iconplus.smartproc.model.request.DrpPengadaanRequest; +import com.iconplus.smartproc.model.response.DrpPengadaanResponse; +import com.iconplus.smartproc.repository.DrpPengadaanDokumenRepository; +import com.iconplus.smartproc.repository.DrpPengadaanRepository; +import com.iconplus.smartproc.util.Constants; +import org.apache.commons.lang3.ObjectUtils; +import org.springframework.stereotype.Service; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +@Service +public class PutDrpPengadaanService implements BaseService { + + private final DrpPengadaanRepository drpPengadaanRepository; + private final DrpPengadaanDokumenRepository drpPengadaanDokumenRepository; + + public PutDrpPengadaanService(DrpPengadaanRepository drpPengadaanRepository, + DrpPengadaanDokumenRepository drpPengadaanDokumenRepository) { + this.drpPengadaanRepository = drpPengadaanRepository; + this.drpPengadaanDokumenRepository = drpPengadaanDokumenRepository; + } + + @Override + public DrpPengadaanResponse execute(DrpPengadaanRequest input) throws IOException { + + var drpPengadaan = drpPengadaanRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(()-> new BusinessException(Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "DRP Pengadaan", input.getId()))); + + drpPengadaan.setNomor(input.getNomor()); + drpPengadaan.setNamaPengadaan(input.getNamaPengadaan()); + drpPengadaan.setLokasiId(input.getLokasiId()); + drpPengadaan.setJenisPengadaanId(input.getJenisPengadaanId()); + drpPengadaan.setUnitInisiatorId(input.getUnitInisiatorId()); + drpPengadaan.setPagu(input.getPagu()); + drpPengadaan.setSumberDanaId(input.getSumberDanaId()); + drpPengadaan.setSupplyPositioningMatrixId(input.getSupplyPositioningMatrixId()); + drpPengadaan.setMetodePengadaanId(input.getMetodePengadaanId()); + drpPengadaan.setMetodePengadaanId(input.getMetodePenyampaianId()); + drpPengadaan.setJenisKontrakId(input.getJenisKontrakId()); + drpPengadaan.setStrategiPengadaanId(input.getStrategiPengadaanId()); + drpPengadaan.setRencanaTanggal(input.getRencanaTanggal()); + drpPengadaan.setTargetTanggal(input.getTargetTanggal()); + drpPengadaan.setHpe(input.getHpe()); + drpPengadaan.setIsActive(input.getIsActive()); + drpPengadaan.setIsDelete(false); + + drpPengadaanRepository.save(drpPengadaan); + + var drpPengadaanDokumenList = drpPengadaanDokumenRepository.findByDrpPengadaanIdAndIsDeleteFalse(drpPengadaan.getId()); + for (DrpPengadaanDokumen drpPengadaanDokumen : drpPengadaanDokumenList) { + drpPengadaanDokumen.setIsDelete(true); + drpPengadaanDokumenRepository.save(drpPengadaanDokumen); + } + + List drpPengadaanDokumenArrayList = new ArrayList<>(); + if (ObjectUtils.isNotEmpty(input.getDataDrpPengadaanDokumen())) { + for (DrpPengadaanDokumenRequest drpPengadaanDokumenRequest : input.getDataDrpPengadaanDokumen()) { + DrpPengadaanDokumen drpPengadaanDokumen = DrpPengadaanDokumen.builder() + .drpPengadaanId(drpPengadaan.getId()) + .drpId(drpPengadaan.getDrpId()) + .jenisDokumenId(drpPengadaanDokumenRequest.getJenisDokumenId()) + .filename(drpPengadaanDokumenRequest.getFilename()) + .keterangan(drpPengadaanDokumenRequest.getKeterangan()) + .isDelete(false) + .build(); + drpPengadaanDokumenArrayList.add(drpPengadaanDokumen); + } + drpPengadaanDokumenRepository.saveAll(drpPengadaanDokumenArrayList); + } + + return DrpPengadaanResponse.builder() + .id(drpPengadaan.getId()) + .build(); + + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/instansi/DeleteInstansiService.java b/src/main/java/com/iconplus/smartproc/service/instansi/DeleteInstansiService.java new file mode 100644 index 0000000..d88373a --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/instansi/DeleteInstansiService.java @@ -0,0 +1,33 @@ +package com.iconplus.smartproc.service.instansi; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.InstansiRequest; +import com.iconplus.smartproc.repository.InstansiRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.stereotype.Service; + +@Service +public class DeleteInstansiService implements BaseService { + + private InstansiRepository instansiRepository; + + public DeleteInstansiService(InstansiRepository instansiRepository) { + this.instansiRepository = instansiRepository; + } + + @Override + public EmptyResponse execute(InstansiRequest input) { + + var instansi = instansiRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "instansi", input.getId()))); + + instansi.setIsDelete(true); + instansiRepository.save(instansi); + + return new EmptyResponse(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/instansi/GetInstansiByIdService.java b/src/main/java/com/iconplus/smartproc/service/instansi/GetInstansiByIdService.java new file mode 100644 index 0000000..33631ce --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/instansi/GetInstansiByIdService.java @@ -0,0 +1,37 @@ +package com.iconplus.smartproc.service.instansi; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.InstansiRequest; +import com.iconplus.smartproc.model.response.InstansiResponse; +import com.iconplus.smartproc.repository.InstansiRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.stereotype.Service; + +@Service +public class GetInstansiByIdService implements BaseService { + + private InstansiRepository instansiRepository; + + public GetInstansiByIdService(InstansiRepository instansiRepository) { + this.instansiRepository = instansiRepository; + } + + @Override + public InstansiResponse execute(InstansiRequest input) { + + var instansi= instansiRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "instansi", input.getId()))); + + return InstansiResponse.builder() + .id(instansi.getId()) + .instansi(instansi.getInstansi()) + .alamat(instansi.getAlamat()) + .keterangan(instansi.getKeterangan()) + .isActive(instansi.getIsActive()) + .isDelete(instansi.getIsDelete()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/instansi/GetListInstansiService.java b/src/main/java/com/iconplus/smartproc/service/instansi/GetListInstansiService.java new file mode 100644 index 0000000..0cdf8c3 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/instansi/GetListInstansiService.java @@ -0,0 +1,64 @@ +package com.iconplus.smartproc.service.instansi; + +import com.iconplus.smartproc.helper.model.Pagination; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.projection.InstansiView; +import com.iconplus.smartproc.model.request.InstansiRequest; +import com.iconplus.smartproc.model.response.GetListInstansiResponse; +import com.iconplus.smartproc.model.response.InstansiResponse; +import com.iconplus.smartproc.repository.InstansiRepository; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class GetListInstansiService implements BaseService { + + private InstansiRepository instansiRepository; + + public GetListInstansiService(InstansiRepository instansiRepository) { + this.instansiRepository = instansiRepository; + } + + @Override + public GetListInstansiResponse execute(InstansiRequest input) { + validateRequest(input); + + List instansiResponseList = new ArrayList<>(); + var listInstansi = instansiRepository.getListInstansi(input.getSearch(), input.getPageable()); + + for (InstansiView instansiView : listInstansi) { + InstansiResponse instansiResponse = InstansiResponse.builder() + .id(instansiView.getId()) + .instansi(instansiView.getInstansi()) + .alamat(instansiView.getAlamat()) + .keterangan(instansiView.getKeterangan()) + .isActive(instansiView.getIsActive()) + .isDelete(instansiView.getIsDelete()) + .build(); + + instansiResponseList.add(instansiResponse); + } + + return GetListInstansiResponse.builder() + .data(instansiResponseList) + .pagination(Pagination.builder() + .pageSize(input.getPageable().getPageSize()) + .currentPage(input.getPageable().getPageNumber()) + .totalPages(listInstansi.getTotalPages()) + .totalRecords(listInstansi.getTotalElements()) + .isFirstPage(listInstansi.isFirst()) + .isLastPage(listInstansi.isLast()) + .build()) + .build(); + + } + + private void validateRequest(InstansiRequest input) { + if (StringUtils.isNotBlank(input.getSearch())) { + input.setSearch('%'+ input.getSearch().toUpperCase()+'%'); + } + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/instansi/PostCreateInstansiService.java b/src/main/java/com/iconplus/smartproc/service/instansi/PostCreateInstansiService.java new file mode 100644 index 0000000..a91d8d2 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/instansi/PostCreateInstansiService.java @@ -0,0 +1,46 @@ +package com.iconplus.smartproc.service.instansi; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.Instansi; +import com.iconplus.smartproc.model.request.InstansiRequest; +import com.iconplus.smartproc.model.response.InstansiResponse; +import com.iconplus.smartproc.repository.InstansiRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +@Service +public class PostCreateInstansiService implements BaseService { + + private InstansiRepository instansiRepository; + + public PostCreateInstansiService(InstansiRepository instansiRepository) { + this.instansiRepository = instansiRepository; + } + + @Override + public InstansiResponse execute(InstansiRequest input) { + + var instansi = instansiRepository.findByInstansiAndIsDeleteFalse(input.getInstansi()); + if (instansi.isPresent()) { + throw new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10002, + Constants.ERR_TTL_10002, + String.format(Constants.ERR_MSG_10002, "Instansi", input.getInstansi())); + } + + Instansi instansiEntity = Instansi.builder() + .instansi(input.getInstansi()) + .alamat(input.getAlamat()) + .keterangan(input.getKeterangan()) + .isActive(input.getIsActive()) + .isDelete(false) + .build(); + var result = instansiRepository.save(instansiEntity); + + return InstansiResponse.builder() + .id(result.getId()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/instansi/PutUpdateInstansiService.java b/src/main/java/com/iconplus/smartproc/service/instansi/PutUpdateInstansiService.java new file mode 100644 index 0000000..4e655e1 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/instansi/PutUpdateInstansiService.java @@ -0,0 +1,38 @@ +package com.iconplus.smartproc.service.instansi; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.InstansiRequest; +import com.iconplus.smartproc.model.response.InstansiResponse; +import com.iconplus.smartproc.repository.InstansiRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.stereotype.Service; + +@Service +public class PutUpdateInstansiService implements BaseService { + + private InstansiRepository instansiRepository; + + public PutUpdateInstansiService(InstansiRepository instansiRepository) { + this.instansiRepository = instansiRepository; + } + + @Override + public InstansiResponse execute(InstansiRequest input) { + + var instansi = instansiRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "instansi", input.getId()))); + + instansi.setInstansi(input.getInstansi()); + instansi.setAlamat(input.getAlamat()); + instansi.setKeterangan(input.getKeterangan()); + instansi.setIsActive(input.getIsActive()); + var result = instansiRepository.save(instansi); + + return InstansiResponse.builder() + .id(result.getId()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/jabatan/DeleteJabatanService.java b/src/main/java/com/iconplus/smartproc/service/jabatan/DeleteJabatanService.java new file mode 100644 index 0000000..4e375b5 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/jabatan/DeleteJabatanService.java @@ -0,0 +1,29 @@ +package com.iconplus.smartproc.service.jabatan; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.JabatanRequest; +import com.iconplus.smartproc.repository.JabatanRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.stereotype.Service; + +@Service +public class DeleteJabatanService implements BaseService { + + private JabatanRepository jabatanRepository; + public DeleteJabatanService(JabatanRepository jabatanRepository) { + this.jabatanRepository = jabatanRepository; + } + @Override + public EmptyResponse execute(JabatanRequest input) { + var jabatan = jabatanRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "Jabatan", input.getId()))); + + jabatan.setIsDelete(true); + jabatanRepository.save(jabatan); + return new EmptyResponse(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/jabatan/GetJabatanService.java b/src/main/java/com/iconplus/smartproc/service/jabatan/GetJabatanService.java new file mode 100644 index 0000000..0871fc9 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/jabatan/GetJabatanService.java @@ -0,0 +1,39 @@ +package com.iconplus.smartproc.service.jabatan; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.JabatanRequest; +import com.iconplus.smartproc.model.response.JabatanResponse; +import com.iconplus.smartproc.repository.JabatanRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.stereotype.Service; + +@Service +public class GetJabatanService implements BaseService { + + private JabatanRepository jabatanRepository; + public GetJabatanService(JabatanRepository jabatanRepository) { + this.jabatanRepository = jabatanRepository; + } + + @Override + public JabatanResponse execute(JabatanRequest input) { + + var jabatan = jabatanRepository.getJabatanDetails(input.getId()) + .orElseThrow(() -> new BusinessException(Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "Jabatan", input.getId()))); + + return JabatanResponse.builder() + .id(jabatan.getId()) + .jabatan(jabatan.getJabatan()) + .keterangan(jabatan.getKeterangan()) + .instansiId(jabatan.getInstansiId()) + .instansi(jabatan.getInstansi()) + .bidangId(jabatan.getBidangId()) + .bidang(jabatan.getBidang()) + .isActive(jabatan.getIsActive()) + .isDelete(jabatan.getIsDelete()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/jabatan/GetListJabatanService.java b/src/main/java/com/iconplus/smartproc/service/jabatan/GetListJabatanService.java new file mode 100644 index 0000000..1e7c072 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/jabatan/GetListJabatanService.java @@ -0,0 +1,63 @@ +package com.iconplus.smartproc.service.jabatan; + +import com.iconplus.smartproc.helper.model.Pagination; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.projection.JabatanView; +import com.iconplus.smartproc.model.request.JabatanRequest; +import com.iconplus.smartproc.model.response.GetListJabatanResponse; +import com.iconplus.smartproc.model.response.JabatanResponse; +import com.iconplus.smartproc.repository.JabatanRepository; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class GetListJabatanService implements BaseService { + + private JabatanRepository jabatanRepository; + public GetListJabatanService(JabatanRepository jabatanRepository) { + this.jabatanRepository = jabatanRepository; + } + + @Override + public GetListJabatanResponse execute(JabatanRequest input) { + validateRequest(input); + List jabatanResponseList = new ArrayList<>() ; + var jabatanViews = jabatanRepository.getListJabatan(input.getSearch(), input.getPageable()); + + for (JabatanView jabatanView : jabatanViews) { + JabatanResponse jabatanResponse = JabatanResponse.builder() + .id(jabatanView.getId()) + .jabatan(jabatanView.getJabatan()) + .keterangan(jabatanView.getKeterangan()) + .instansiId(jabatanView.getInstansiId()) + .instansi(jabatanView.getInstansi()) + .bidangId(jabatanView.getBidangId()) + .bidang(jabatanView.getBidang()) + .isActive(jabatanView.getIsActive()) + .isDelete(jabatanView.getIsDelete()) + .build(); + jabatanResponseList.add(jabatanResponse); + } + return GetListJabatanResponse.builder() + .data(jabatanResponseList) + .pagination(Pagination.builder() + .pageSize(input.getPageable().getPageSize()) + .currentPage(input.getPageable().getPageNumber()) + .totalPages(jabatanViews.getTotalPages()) + .totalRecords(jabatanViews.getTotalElements()) + .isFirstPage(jabatanViews.isFirst()) + .isLastPage(jabatanViews.isLast()) + .build()) + .build(); + } + + private void validateRequest(JabatanRequest input) { + if (StringUtils.isNotBlank(input.getSearch())) { + input.setSearch('%'+ input.getSearch().toUpperCase()+'%'); + } + } + +} diff --git a/src/main/java/com/iconplus/smartproc/service/jabatan/PostCreateJabatanService.java b/src/main/java/com/iconplus/smartproc/service/jabatan/PostCreateJabatanService.java new file mode 100644 index 0000000..cef7bb7 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/jabatan/PostCreateJabatanService.java @@ -0,0 +1,46 @@ +package com.iconplus.smartproc.service.jabatan; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.Jabatan; +import com.iconplus.smartproc.model.request.JabatanRequest; +import com.iconplus.smartproc.model.response.JabatanResponse; +import com.iconplus.smartproc.repository.JabatanRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +@Service +public class PostCreateJabatanService implements BaseService { + + private JabatanRepository jabatanRepository; + public PostCreateJabatanService(JabatanRepository jabatanRepository) { + this.jabatanRepository = jabatanRepository; + } + + @Override + public JabatanResponse execute(JabatanRequest input) { + + var jabatan = jabatanRepository.findByJabatanAndIsDeleteFalse(input.getJabatan()); + if (jabatan.isPresent()) { + throw new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10002, + Constants.ERR_TTL_10002, + String.format(Constants.ERR_MSG_10002, "Jabatan", input.getJabatan())); + } + + Jabatan jabatanEntity = Jabatan.builder() + .jabatan(input.getJabatan()) + .keterangan(input.getKeterangan()) + .instansiId(input.getInstansiId()) + .bidangId(input.getBidangId()) + .isActive(input.getIsActive()) + .isDelete(false) + .build(); + var result = jabatanRepository.save(jabatanEntity); + + return JabatanResponse.builder() + .id(result.getId()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/jabatan/PutUpdateJabatanService.java b/src/main/java/com/iconplus/smartproc/service/jabatan/PutUpdateJabatanService.java new file mode 100644 index 0000000..6d6cbfb --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/jabatan/PutUpdateJabatanService.java @@ -0,0 +1,37 @@ +package com.iconplus.smartproc.service.jabatan; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.JabatanRequest; +import com.iconplus.smartproc.model.response.JabatanResponse; +import com.iconplus.smartproc.repository.JabatanRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.stereotype.Service; + +@Service +public class PutUpdateJabatanService implements BaseService { + + private JabatanRepository jabatanRepository; + public PutUpdateJabatanService(JabatanRepository jabatanRepository) { + this.jabatanRepository = jabatanRepository; + } + + @Override + public JabatanResponse execute(JabatanRequest input) { + + var jabatan = jabatanRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "Jabatan", input.getId()))); + + jabatan.setJabatan(input.getJabatan()); + jabatan.setKeterangan(input.getKeterangan()); + jabatan.setInstansiId(input.getInstansiId()); + jabatan.setBidangId(input.getBidangId()); + jabatan.setIsActive(input.getIsActive()); + var result = jabatanRepository.save(jabatan); + return JabatanResponse.builder() + .id(result.getId()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/jenisanggaran/DeleteJenisAnggaranService.java b/src/main/java/com/iconplus/smartproc/service/jenisanggaran/DeleteJenisAnggaranService.java new file mode 100644 index 0000000..39de6a3 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/jenisanggaran/DeleteJenisAnggaranService.java @@ -0,0 +1,38 @@ +package com.iconplus.smartproc.service.jenisanggaran; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.JenisAnggaranRequest; +import com.iconplus.smartproc.repository.JenisAnggaranRepository; +import com.iconplus.smartproc.util.Constants; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +@Service +@Slf4j +public class DeleteJenisAnggaranService implements BaseService { + + private JenisAnggaranRepository jenisAnggaranRepository; + + public DeleteJenisAnggaranService(JenisAnggaranRepository jenisAnggaranRepository) { + this.jenisAnggaranRepository = jenisAnggaranRepository; + } + + + @Override + public EmptyResponse execute(JenisAnggaranRequest input) { + + var jenisAnggaran = jenisAnggaranRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "Jenis Anggaran", input.getId()))); + + jenisAnggaran.setIsDelete(true); + jenisAnggaranRepository.save(jenisAnggaran); + log.info("success delete jenis anggaran id {}", jenisAnggaran.getIsDelete()); + return new EmptyResponse(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/jenisanggaran/GetJenisAnggaranByIdService.java b/src/main/java/com/iconplus/smartproc/service/jenisanggaran/GetJenisAnggaranByIdService.java new file mode 100644 index 0000000..daf3c7f --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/jenisanggaran/GetJenisAnggaranByIdService.java @@ -0,0 +1,43 @@ +package com.iconplus.smartproc.service.jenisanggaran; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.JenisAnggaranRequest; +import com.iconplus.smartproc.model.response.JenisAnggaranResponse; +import com.iconplus.smartproc.repository.JenisAnggaranRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +@Service +public class GetJenisAnggaranByIdService implements BaseService { + + private final JenisAnggaranRepository jenisAnggaranRepository; + + public GetJenisAnggaranByIdService(JenisAnggaranRepository jenisAnggaranRepository) { + this.jenisAnggaranRepository = jenisAnggaranRepository; + } + + @Override + public JenisAnggaranResponse execute(JenisAnggaranRequest input) { + JenisAnggaranResponse jenisAnggaranResponse = new JenisAnggaranResponse(); + var jenisAnggaranView = jenisAnggaranRepository.findByIdAndIsDeleteFalse(input.getId()); + if (jenisAnggaranView.isEmpty()) { + throw new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "Jenis Anggaran", input.getId())); + } + + jenisAnggaranResponse.setJenisAnggaran(jenisAnggaranView.get().getJenisAnggaran()); + jenisAnggaranResponse.setKeterangan(jenisAnggaranView.get().getKeterangan()); + jenisAnggaranResponse.setIsDelete(jenisAnggaranView.get().getIsDelete()); + + return JenisAnggaranResponse.builder() + .id(jenisAnggaranView.get().getId()) + .jenisAnggaran(jenisAnggaranView.get().getJenisAnggaran()) + .keterangan(jenisAnggaranView.get().getKeterangan()) + .isDelete(jenisAnggaranView.get().getIsDelete()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/jenisanggaran/GetListJenisAnggaranService.java b/src/main/java/com/iconplus/smartproc/service/jenisanggaran/GetListJenisAnggaranService.java new file mode 100644 index 0000000..fcd8491 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/jenisanggaran/GetListJenisAnggaranService.java @@ -0,0 +1,60 @@ +package com.iconplus.smartproc.service.jenisanggaran; + +import com.iconplus.smartproc.helper.model.Pagination; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.projection.JenisAnggaranView; +import com.iconplus.smartproc.model.request.JenisAnggaranRequest; +import com.iconplus.smartproc.model.response.GetListJenisAnggaranResponse; +import com.iconplus.smartproc.model.response.JenisAnggaranResponse; +import com.iconplus.smartproc.repository.JenisAnggaranRepository; +import org.apache.commons.lang3.StringUtils; +import org.springframework.data.domain.Page; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class GetListJenisAnggaranService implements BaseService { + + private JenisAnggaranRepository jenisAnggaranRepository; + + public GetListJenisAnggaranService(JenisAnggaranRepository jenisAnggaranRepository) { + this.jenisAnggaranRepository = jenisAnggaranRepository; + } + + @Override + public GetListJenisAnggaranResponse execute(JenisAnggaranRequest input) { + validateRequest(input); + List jenisAnggaranResponseList = new ArrayList<>(); + Page jenisAnggaranViews = jenisAnggaranRepository.getAllJenisAnggaran(input.getSearch(), input.getPageable()); + + for (JenisAnggaranView jenisAnggaranView : jenisAnggaranViews) { + JenisAnggaranResponse jenisAnggaranResponse = JenisAnggaranResponse.builder() + .id(jenisAnggaranView.getId()) + .jenisAnggaran(jenisAnggaranView.getJenisAnggaran()) + .keterangan(jenisAnggaranView.getKeterangan()) + .isDelete(jenisAnggaranView.getIsDelete()) + .build(); + jenisAnggaranResponseList.add(jenisAnggaranResponse); + } + + return GetListJenisAnggaranResponse.builder() + .data(jenisAnggaranResponseList) + .pagination(Pagination.builder() + .pageSize(input.getPageable().getPageSize()) + .currentPage(input.getPageable().getPageNumber()) + .totalPages(jenisAnggaranViews.getTotalPages()) + .totalRecords(jenisAnggaranViews.getTotalElements()) + .isFirstPage(jenisAnggaranViews.isFirst()) + .isLastPage(jenisAnggaranViews.isLast()) + .build()) + .build(); + } + + private void validateRequest(JenisAnggaranRequest input) { + if (StringUtils.isNotBlank(input.getSearch())) { + input.setSearch('%'+ input.getSearch().toUpperCase()+'%'); + } + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/jenisanggaran/PostCreateJenisAnggaranService.java b/src/main/java/com/iconplus/smartproc/service/jenisanggaran/PostCreateJenisAnggaranService.java new file mode 100644 index 0000000..ecac262 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/jenisanggaran/PostCreateJenisAnggaranService.java @@ -0,0 +1,48 @@ +package com.iconplus.smartproc.service.jenisanggaran; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.JenisAnggaran; +import com.iconplus.smartproc.model.request.JenisAnggaranRequest; +import com.iconplus.smartproc.model.response.JenisAnggaranResponse; +import com.iconplus.smartproc.repository.JenisAnggaranRepository; +import com.iconplus.smartproc.util.Constants; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +@Service +@Slf4j +public class PostCreateJenisAnggaranService implements BaseService { + + private final JenisAnggaranRepository jenisAnggaranRepository; + + public PostCreateJenisAnggaranService(JenisAnggaranRepository jenisAnggaranRepository) { + this.jenisAnggaranRepository = jenisAnggaranRepository; + } + + @Override + public JenisAnggaranResponse execute(JenisAnggaranRequest input) { + + var existJenisAnggaran = jenisAnggaranRepository.findByJenisAnggaranAndIsDeleteFalse(input.getJenisAnggaran()); + if (existJenisAnggaran.isPresent()) { + throw new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10002, + Constants.ERR_TTL_10002, + String.format(Constants.ERR_MSG_10002, "Jenis Anggaran", input.getJenisAnggaran())); + } + + JenisAnggaran jenisAnggaran = JenisAnggaran.builder() + .jenisAnggaran(input.getJenisAnggaran()) + .keterangan(input.getKeterangan()) + .isDelete(false) + .build(); + + var result = jenisAnggaranRepository.save(jenisAnggaran); + log.info("success insert jenis anggaran id : {}", result.getId()); + return JenisAnggaranResponse.builder() + .id(result.getId()) + .build(); + + } +} \ No newline at end of file diff --git a/src/main/java/com/iconplus/smartproc/service/jenisanggaran/PutUpdateJenisAnggaranService.java b/src/main/java/com/iconplus/smartproc/service/jenisanggaran/PutUpdateJenisAnggaranService.java new file mode 100644 index 0000000..9f86297 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/jenisanggaran/PutUpdateJenisAnggaranService.java @@ -0,0 +1,45 @@ +package com.iconplus.smartproc.service.jenisanggaran; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.JenisAnggaranRequest; +import com.iconplus.smartproc.model.response.JenisAnggaranResponse; +import com.iconplus.smartproc.repository.JenisAnggaranRepository; +import com.iconplus.smartproc.util.Constants; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.BooleanUtils; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +import java.sql.Timestamp; + +@Service +@Slf4j +public class PutUpdateJenisAnggaranService implements BaseService { + + private JenisAnggaranRepository jenisAnggaranRepository; + + public PutUpdateJenisAnggaranService(JenisAnggaranRepository jenisAnggaranRepository) { + this.jenisAnggaranRepository = jenisAnggaranRepository; + } + + @Override + public JenisAnggaranResponse execute(JenisAnggaranRequest input) { + + var jenisAnggaran = jenisAnggaranRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "Jenis Anggaran", input.getId()))); + + jenisAnggaran.setJenisAnggaran(input.getJenisAnggaran()); + jenisAnggaran.setKeterangan(input.getKeterangan()); + jenisAnggaran.setIsDelete(BooleanUtils.isTrue(input.getIsDelete())); + jenisAnggaran.setLastUpdate(new Timestamp(System.currentTimeMillis())); + jenisAnggaranRepository.save(jenisAnggaran); + log.info("Success edit jenis anggaran id {}", jenisAnggaran.getId()); + return JenisAnggaranResponse.builder() + .id(jenisAnggaran.getId()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/jeniskontrak/DeleteJenisKontrakService.java b/src/main/java/com/iconplus/smartproc/service/jeniskontrak/DeleteJenisKontrakService.java new file mode 100644 index 0000000..da4a80e --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/jeniskontrak/DeleteJenisKontrakService.java @@ -0,0 +1,38 @@ +package com.iconplus.smartproc.service.jeniskontrak; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.JenisKontrakRequest; +import com.iconplus.smartproc.repository.JenisKontrakRepository; +import com.iconplus.smartproc.util.Constants; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +@Service +@Slf4j +public class DeleteJenisKontrakService implements BaseService { + + private JenisKontrakRepository jenisKontrakRepository; + + public DeleteJenisKontrakService(JenisKontrakRepository jenisKontrakRepository) { + this.jenisKontrakRepository = jenisKontrakRepository; + } + + + @Override + public EmptyResponse execute(JenisKontrakRequest input) { + + var jenisKontrak = jenisKontrakRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "Jenis Kontrak", input.getId()))); + + jenisKontrak.setIsDelete(true); + jenisKontrakRepository.save(jenisKontrak); + log.info("success delete jenis kontrak id {}", jenisKontrak.getIsDelete()); + return new EmptyResponse(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/jeniskontrak/GetJenisKontrakByIdService.java b/src/main/java/com/iconplus/smartproc/service/jeniskontrak/GetJenisKontrakByIdService.java new file mode 100644 index 0000000..c514c89 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/jeniskontrak/GetJenisKontrakByIdService.java @@ -0,0 +1,40 @@ +package com.iconplus.smartproc.service.jeniskontrak; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.JenisKontrakRequest; +import com.iconplus.smartproc.model.response.JenisKontrakResponse; +import com.iconplus.smartproc.repository.JenisKontrakRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + + +@Service +public class GetJenisKontrakByIdService implements BaseService { + + private final JenisKontrakRepository jenisKontrakRepository; + + public GetJenisKontrakByIdService(JenisKontrakRepository jenisKontrakRepository) { + this.jenisKontrakRepository = jenisKontrakRepository; + } + + @Override + public JenisKontrakResponse execute(JenisKontrakRequest input) { + var jenisKontrakView = jenisKontrakRepository.findByIdAndIsDeleteFalse(input.getId()); + if (jenisKontrakView.isEmpty()) { + throw new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "Jenis Kontrak", input.getId())); + } + + return JenisKontrakResponse.builder() + .id(jenisKontrakView.get().getId()) + .jenisKontrak(jenisKontrakView.get().getJenisKontrak()) + .keterangan(jenisKontrakView.get().getKeterangan()) + .isActive(jenisKontrakView.get().getIsActive()) + .isDelete(jenisKontrakView.get().getIsDelete()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/jeniskontrak/GetListJenisKontrakService.java b/src/main/java/com/iconplus/smartproc/service/jeniskontrak/GetListJenisKontrakService.java new file mode 100644 index 0000000..ca09313 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/jeniskontrak/GetListJenisKontrakService.java @@ -0,0 +1,61 @@ +package com.iconplus.smartproc.service.jeniskontrak; + +import com.iconplus.smartproc.helper.model.Pagination; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.projection.JenisKontrakView; +import com.iconplus.smartproc.model.request.JenisKontrakRequest; +import com.iconplus.smartproc.model.response.GetListJenisKontrakResponse; +import com.iconplus.smartproc.model.response.JenisKontrakResponse; +import com.iconplus.smartproc.repository.JenisKontrakRepository; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + + +@Service +public class GetListJenisKontrakService implements BaseService { + + private JenisKontrakRepository jenisKontrakRepository; + + public GetListJenisKontrakService(JenisKontrakRepository jenisKontrakRepository) { + this.jenisKontrakRepository = jenisKontrakRepository; + } + + @Override + public GetListJenisKontrakResponse execute(JenisKontrakRequest input) { + validateRequest(input); + List jenisKontrakResponseList = new ArrayList<>(); + var jenisKontrakViews = jenisKontrakRepository.getAllJenisKontrak(input.getSearch(), input.getPageable()); + + for (JenisKontrakView jenisKontrakView : jenisKontrakViews) { + JenisKontrakResponse jenisKontrakResponse = JenisKontrakResponse.builder() + .id(jenisKontrakView.getId()) + .jenisKontrak(jenisKontrakView.getJenisKontrak()) + .keterangan(jenisKontrakView.getKeterangan()) + .isActive(jenisKontrakView.getIsActive()) + .isDelete(jenisKontrakView.getIsDelete()) + .build(); + jenisKontrakResponseList.add(jenisKontrakResponse); + } + + return GetListJenisKontrakResponse.builder() + .data(jenisKontrakResponseList) + .pagination(Pagination.builder() + .pageSize(input.getPageable().getPageSize()) + .currentPage(input.getPageable().getPageNumber()) + .totalPages(jenisKontrakViews.getTotalPages()) + .totalRecords(jenisKontrakViews.getTotalElements()) + .isFirstPage(jenisKontrakViews.isFirst()) + .isLastPage(jenisKontrakViews.isLast()) + .build()) + .build(); + } + + private void validateRequest(JenisKontrakRequest input) { + if (StringUtils.isNotBlank(input.getSearch())) { + input.setSearch('%'+ input.getSearch().toUpperCase()+'%'); + } + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/jeniskontrak/PostCreateJenisKontrakService.java b/src/main/java/com/iconplus/smartproc/service/jeniskontrak/PostCreateJenisKontrakService.java new file mode 100644 index 0000000..1019fda --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/jeniskontrak/PostCreateJenisKontrakService.java @@ -0,0 +1,49 @@ +package com.iconplus.smartproc.service.jeniskontrak; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.JenisKontrak; +import com.iconplus.smartproc.model.request.JenisKontrakRequest; +import com.iconplus.smartproc.model.response.JenisKontrakResponse; +import com.iconplus.smartproc.repository.JenisKontrakRepository; +import com.iconplus.smartproc.util.Constants; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +@Service +@Slf4j +public class PostCreateJenisKontrakService implements BaseService { + + private final JenisKontrakRepository jenisKontrakRepository; + + public PostCreateJenisKontrakService(JenisKontrakRepository jenisKontrakRepository) { + this.jenisKontrakRepository = jenisKontrakRepository; + } + + @Override + public JenisKontrakResponse execute(JenisKontrakRequest input) { + + var existJenisKontrak = jenisKontrakRepository.findByJenisKontrakAndIsDeleteFalse(input.getJenisKontrak()); + if (existJenisKontrak.isPresent()) { + throw new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10002, + Constants.ERR_TTL_10002, + String.format(Constants.ERR_MSG_10002, "Jenis Kontrak", input.getJenisKontrak())); + } + + JenisKontrak jenisKontrak = JenisKontrak.builder() + .jenisKontrak(input.getJenisKontrak()) + .isActive(input.getIsActive()) + .keterangan(input.getKeterangan()) + .isDelete(false) + .build(); + + var result = jenisKontrakRepository.save(jenisKontrak); + log.info("success insert jenis kontrak id : {}", result.getId()); + return JenisKontrakResponse.builder() + .id(result.getId()) + .build(); + + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/jeniskontrak/PutUpdateJenisKontrakService.java b/src/main/java/com/iconplus/smartproc/service/jeniskontrak/PutUpdateJenisKontrakService.java new file mode 100644 index 0000000..6efcb12 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/jeniskontrak/PutUpdateJenisKontrakService.java @@ -0,0 +1,42 @@ +package com.iconplus.smartproc.service.jeniskontrak; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.JenisKontrakRequest; +import com.iconplus.smartproc.model.response.JenisKontrakResponse; +import com.iconplus.smartproc.repository.JenisKontrakRepository; +import com.iconplus.smartproc.util.Constants; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + + +@Service +@Slf4j +public class PutUpdateJenisKontrakService implements BaseService { + + private JenisKontrakRepository jenisKontrakRepository; + + public PutUpdateJenisKontrakService(JenisKontrakRepository jenisKontrakRepository) { + this.jenisKontrakRepository = jenisKontrakRepository; + } + + @Override + public JenisKontrakResponse execute(JenisKontrakRequest input) { + + var jenisKontrak = jenisKontrakRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "Jenis Kontrak", input.getId()))); + + jenisKontrak.setJenisKontrak(input.getJenisKontrak()); + jenisKontrak.setKeterangan(input.getKeterangan()); + jenisKontrak.setIsActive(input.getIsActive()); + jenisKontrakRepository.save(jenisKontrak); + log.info("Success edit jenis kontrak id {}", jenisKontrak.getId()); + return JenisKontrakResponse.builder() + .id(jenisKontrak.getId()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/jenispengadaan/DeleteJenisPengadaanService.java b/src/main/java/com/iconplus/smartproc/service/jenispengadaan/DeleteJenisPengadaanService.java new file mode 100644 index 0000000..09b224b --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/jenispengadaan/DeleteJenisPengadaanService.java @@ -0,0 +1,31 @@ +package com.iconplus.smartproc.service.jenispengadaan; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.JenisPengadaanRequest; +import com.iconplus.smartproc.repository.JenisPengadaanRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +@Service +public class DeleteJenisPengadaanService implements BaseService { + + private JenisPengadaanRepository jenisPengadaanRepository; + public DeleteJenisPengadaanService(JenisPengadaanRepository jenisPengadaanRepository) { + this.jenisPengadaanRepository = jenisPengadaanRepository; + } + + @Override + public EmptyResponse execute(JenisPengadaanRequest input) { + var jenisPengadaan = jenisPengadaanRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "Jenis Pengadaan", input.getId()))); + jenisPengadaan.setIsDelete(true); + jenisPengadaanRepository.save(jenisPengadaan); + return new EmptyResponse(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/jenispengadaan/GetJenisPengadaanService.java b/src/main/java/com/iconplus/smartproc/service/jenispengadaan/GetJenisPengadaanService.java new file mode 100644 index 0000000..489b1a8 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/jenispengadaan/GetJenisPengadaanService.java @@ -0,0 +1,37 @@ +package com.iconplus.smartproc.service.jenispengadaan; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.JenisPengadaanRequest; +import com.iconplus.smartproc.model.response.JenisPengadaanResponse; +import com.iconplus.smartproc.repository.JenisPengadaanRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +@Service +public class GetJenisPengadaanService implements BaseService { + + private JenisPengadaanRepository jenisPengadaanRepository; + public GetJenisPengadaanService(JenisPengadaanRepository jenisPengadaanRepository) { + this.jenisPengadaanRepository = jenisPengadaanRepository; + } + + @Override + public JenisPengadaanResponse execute(JenisPengadaanRequest input) { + + var jenisPengadaan = jenisPengadaanRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "Jenis Pengadaan", input.getId()))); + + return JenisPengadaanResponse.builder() + .id(jenisPengadaan.getId()) + .jenisPengadaan(jenisPengadaan.getJenisPengadaan()) + .keterangan(jenisPengadaan.getKeterangan()) + .isActive(jenisPengadaan.getIsActive()) + .isDelete(jenisPengadaan.getIsDelete()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/jenispengadaan/GetListJenisPengadaanService.java b/src/main/java/com/iconplus/smartproc/service/jenispengadaan/GetListJenisPengadaanService.java new file mode 100644 index 0000000..1460e96 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/jenispengadaan/GetListJenisPengadaanService.java @@ -0,0 +1,59 @@ +package com.iconplus.smartproc.service.jenispengadaan; + +import com.iconplus.smartproc.helper.model.Pagination; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.projection.JenisPengadaanView; +import com.iconplus.smartproc.model.request.JenisPengadaanRequest; +import com.iconplus.smartproc.model.response.GetListJenisPengadaanResponse; +import com.iconplus.smartproc.model.response.JenisPengadaanResponse; +import com.iconplus.smartproc.repository.JenisPengadaanRepository; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class GetListJenisPengadaanService implements BaseService { + + private JenisPengadaanRepository jenisPengadaanRepository; + public GetListJenisPengadaanService(JenisPengadaanRepository jenisPengadaanRepository) { + this.jenisPengadaanRepository = jenisPengadaanRepository; + } + + @Override + public GetListJenisPengadaanResponse execute(JenisPengadaanRequest input) { + validateRequest(input); + List jenisPengadaanResponseList = new ArrayList<>(); + var jenisPengadaanViews = jenisPengadaanRepository.getListJenisPengadaan(input.getSearch(), input.getPageable()); + + for (JenisPengadaanView jenisPengadaanView : jenisPengadaanViews) { + JenisPengadaanResponse jenisPengadaanResponse = JenisPengadaanResponse.builder() + .id(jenisPengadaanView.getId()) + .jenisPengadaan(jenisPengadaanView.getJenisPengadaan()) + .keterangan(jenisPengadaanView.getKeterangan()) + .isActive(jenisPengadaanView.getIsActive()) + .build(); + jenisPengadaanResponseList.add(jenisPengadaanResponse); + } + + return GetListJenisPengadaanResponse.builder() + .data(jenisPengadaanResponseList) + .pagination(Pagination.builder() + .pageSize(input.getPageable().getPageSize()) + .currentPage(input.getPageable().getPageNumber()) + .totalPages(jenisPengadaanViews.getTotalPages()) + .totalRecords(jenisPengadaanViews.getTotalElements()) + .isFirstPage(jenisPengadaanViews.isFirst()) + .isLastPage(jenisPengadaanViews.isLast()) + .build()) + .build(); + + } + + private void validateRequest(JenisPengadaanRequest input) { + if (StringUtils.isNotBlank(input.getSearch())) { + input.setSearch('%'+ input.getSearch().toUpperCase()+'%'); + } + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/jenispengadaan/PostCreateJenisPengadaanService.java b/src/main/java/com/iconplus/smartproc/service/jenispengadaan/PostCreateJenisPengadaanService.java new file mode 100644 index 0000000..ac89700 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/jenispengadaan/PostCreateJenisPengadaanService.java @@ -0,0 +1,42 @@ +package com.iconplus.smartproc.service.jenispengadaan; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.JenisPengadaan; +import com.iconplus.smartproc.model.request.JenisPengadaanRequest; +import com.iconplus.smartproc.model.response.JenisPengadaanResponse; +import com.iconplus.smartproc.repository.JenisPengadaanRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +@Service +public class PostCreateJenisPengadaanService implements BaseService { + + private JenisPengadaanRepository jenisPengadaanRepository; + public PostCreateJenisPengadaanService(JenisPengadaanRepository jenisPengadaanRepository) { + this.jenisPengadaanRepository = jenisPengadaanRepository; + } + + @Override + public JenisPengadaanResponse execute(JenisPengadaanRequest input) { + var jenisPengadaan = jenisPengadaanRepository.findByJenisPengadaanAndIsDeleteFalse(input.getJenisPengadaan()); + if (jenisPengadaan.isPresent()) { + throw new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10002, + Constants.ERR_TTL_10002, + String.format(Constants.ERR_MSG_10002, "Jenis Pengadaan", input.getJenisPengadaan())); + } + + JenisPengadaan jenisPengadaanEntity = JenisPengadaan.builder() + .jenisPengadaan(input.getJenisPengadaan()) + .keterangan(input.getKeterangan()) + .isActive(input.getIsActive()) + .isDelete(false) + .build(); + var result = jenisPengadaanRepository.save(jenisPengadaanEntity); + return JenisPengadaanResponse.builder() + .id(result.getId()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/jenispengadaan/PutUpdateJenisPengadaanService.java b/src/main/java/com/iconplus/smartproc/service/jenispengadaan/PutUpdateJenisPengadaanService.java new file mode 100644 index 0000000..6afeb01 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/jenispengadaan/PutUpdateJenisPengadaanService.java @@ -0,0 +1,35 @@ +package com.iconplus.smartproc.service.jenispengadaan; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.JenisPengadaanRequest; +import com.iconplus.smartproc.model.response.JenisPengadaanResponse; +import com.iconplus.smartproc.repository.JenisPengadaanRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +@Service +public class PutUpdateJenisPengadaanService implements BaseService { + + private JenisPengadaanRepository jenisPengadaanRepository; + public PutUpdateJenisPengadaanService(JenisPengadaanRepository jenisPengadaanRepository) { + this.jenisPengadaanRepository = jenisPengadaanRepository; + } + + @Override + public JenisPengadaanResponse execute(JenisPengadaanRequest input) { + var jenisPengadaan = jenisPengadaanRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "Jenis Pengadaan", input.getId()))); + jenisPengadaan.setJenisPengadaan(input.getJenisPengadaan()); + jenisPengadaan.setKeterangan(input.getKeterangan()); + jenisPengadaan.setIsActive(input.getIsActive()); + jenisPengadaanRepository.save(jenisPengadaan); + return JenisPengadaanResponse.builder() + .id(jenisPengadaan.getId()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/lokasi/DeleteLokasiService.java b/src/main/java/com/iconplus/smartproc/service/lokasi/DeleteLokasiService.java new file mode 100644 index 0000000..00ae541 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/lokasi/DeleteLokasiService.java @@ -0,0 +1,38 @@ +package com.iconplus.smartproc.service.lokasi; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.LokasiRequest; +import com.iconplus.smartproc.repository.LokasiRepository; +import com.iconplus.smartproc.util.Constants; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +@Service +@Slf4j +public class DeleteLokasiService implements BaseService { + + private LokasiRepository lokasiRepository; + + public DeleteLokasiService(LokasiRepository lokasiRepository) { + this.lokasiRepository = lokasiRepository; + } + + + @Override + public EmptyResponse execute(LokasiRequest input) { + + var lokasi = lokasiRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "Lokasi", input.getId()))); + + lokasi.setIsDelete(true); + lokasiRepository.save(lokasi); + log.info("success delete jenis lokasi id {}", lokasi.getIsDelete()); + return new EmptyResponse(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/lokasi/GetListLokasiService.java b/src/main/java/com/iconplus/smartproc/service/lokasi/GetListLokasiService.java new file mode 100644 index 0000000..cb64713 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/lokasi/GetListLokasiService.java @@ -0,0 +1,61 @@ +package com.iconplus.smartproc.service.lokasi; + +import com.iconplus.smartproc.helper.model.Pagination; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.projection.LokasiView; +import com.iconplus.smartproc.model.request.LokasiRequest; +import com.iconplus.smartproc.model.response.GetListLokasiResponse; +import com.iconplus.smartproc.model.response.LokasiResponse; +import com.iconplus.smartproc.repository.LokasiRepository; +import org.apache.commons.lang3.StringUtils; +import org.springframework.data.domain.Page; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class GetListLokasiService implements BaseService { + + private LokasiRepository lokasiRepository; + + public GetListLokasiService(LokasiRepository lokasiRepository) { + this.lokasiRepository = lokasiRepository; + } + + @Override + public GetListLokasiResponse execute(LokasiRequest input) { + validateRequest(input); + List lokasiResponseList = new ArrayList<>(); + Page lokasiViews = lokasiRepository.getAllLokasi(input.getSearch(), input.getPageable()); + + for (LokasiView lokasiView : lokasiViews) { + LokasiResponse lokasiResponse = LokasiResponse.builder() + .id(lokasiView.getId()) + .lokasi(lokasiView.getLokasi()) + .keterangan(lokasiView.getKeterangan()) + .isActive(lokasiView.getIsActive()) + .isDelete(lokasiView.getIsDelete()) + .build(); + lokasiResponseList.add(lokasiResponse); + } + + return GetListLokasiResponse.builder() + .data(lokasiResponseList) + .pagination(Pagination.builder() + .pageSize(input.getPageable().getPageSize()) + .currentPage(input.getPageable().getPageNumber()) + .totalPages(lokasiViews.getTotalPages()) + .totalRecords(lokasiViews.getTotalElements()) + .isFirstPage(lokasiViews.isFirst()) + .isLastPage(lokasiViews.isLast()) + .build()) + .build(); + } + + private void validateRequest(LokasiRequest input) { + if (StringUtils.isNotBlank(input.getSearch())) { + input.setSearch('%'+ input.getSearch().toUpperCase()+'%'); + } + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/lokasi/GetLokasiByIdService.java b/src/main/java/com/iconplus/smartproc/service/lokasi/GetLokasiByIdService.java new file mode 100644 index 0000000..f9266bc --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/lokasi/GetLokasiByIdService.java @@ -0,0 +1,43 @@ +package com.iconplus.smartproc.service.lokasi; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.LokasiRequest; +import com.iconplus.smartproc.model.response.LokasiResponse; +import com.iconplus.smartproc.repository.LokasiRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +@Service +public class GetLokasiByIdService implements BaseService { + + private final LokasiRepository lokasiRepository; + + public GetLokasiByIdService(LokasiRepository lokasiRepository) { + this.lokasiRepository = lokasiRepository; + } + + @Override + public LokasiResponse execute(LokasiRequest input) { + LokasiResponse lokasiResponse = new LokasiResponse(); + var lokasiView = lokasiRepository.findByIdAndIsDeleteFalse(input.getId()); + if (lokasiView.isEmpty()) { + throw new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "Lokasi", input.getId())); + } + + lokasiResponse.setLokasi(lokasiView.get().getLokasi()); + lokasiResponse.setKeterangan(lokasiView.get().getKeterangan()); + lokasiResponse.setIsDelete(lokasiView.get().getIsDelete()); + + return LokasiResponse.builder() + .id(lokasiView.get().getId()) + .lokasi(lokasiView.get().getLokasi()) + .keterangan(lokasiView.get().getKeterangan()) + .isDelete(lokasiView.get().getIsDelete()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/lokasi/PostCreateLokasiService.java b/src/main/java/com/iconplus/smartproc/service/lokasi/PostCreateLokasiService.java new file mode 100644 index 0000000..7eb9dd4 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/lokasi/PostCreateLokasiService.java @@ -0,0 +1,49 @@ +package com.iconplus.smartproc.service.lokasi; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.Lokasi; +import com.iconplus.smartproc.model.request.LokasiRequest; +import com.iconplus.smartproc.model.response.LokasiResponse; +import com.iconplus.smartproc.repository.LokasiRepository; +import com.iconplus.smartproc.util.Constants; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +@Service +@Slf4j +public class PostCreateLokasiService implements BaseService { + + private final LokasiRepository lokasiRepository; + + public PostCreateLokasiService(LokasiRepository lokasiRepository) { + this.lokasiRepository = lokasiRepository; + } + + @Override + public LokasiResponse execute(LokasiRequest input) { + + var existLokasi = lokasiRepository.findByLokasiAndIsDeleteFalse(input.getLokasi()); + if (existLokasi.isPresent()) { + throw new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10002, + Constants.ERR_TTL_10002, + String.format(Constants.ERR_MSG_10002, "Lokasi", input.getLokasi())); + } + + Lokasi lokasi = Lokasi.builder() + .lokasi(input.getLokasi()) + .keterangan(input.getKeterangan()) + .isDelete(false) + .isActive(input.getIsActive()) + .build(); + + var result = lokasiRepository.save(lokasi); + log.info("success insert lokasi id : {}", result.getId()); + return LokasiResponse.builder() + .id(result.getId()) + .build(); + + } +} \ No newline at end of file diff --git a/src/main/java/com/iconplus/smartproc/service/lokasi/PutUpdateLokasiService.java b/src/main/java/com/iconplus/smartproc/service/lokasi/PutUpdateLokasiService.java new file mode 100644 index 0000000..5215eef --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/lokasi/PutUpdateLokasiService.java @@ -0,0 +1,45 @@ +package com.iconplus.smartproc.service.lokasi; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.LokasiRequest; +import com.iconplus.smartproc.model.response.LokasiResponse; +import com.iconplus.smartproc.repository.LokasiRepository; +import com.iconplus.smartproc.util.Constants; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.BooleanUtils; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +import java.sql.Timestamp; + +@Service +@Slf4j +public class PutUpdateLokasiService implements BaseService { + + private LokasiRepository lokasiRepository; + + public PutUpdateLokasiService(LokasiRepository lokasiRepository) { + this.lokasiRepository = lokasiRepository; + } + + @Override + public LokasiResponse execute(LokasiRequest input) { + + var lokasi = lokasiRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "Lokasi", input.getId()))); + + lokasi.setLokasi(input.getLokasi()); + lokasi.setKeterangan(input.getKeterangan()); + lokasi.setIsDelete(BooleanUtils.isTrue(input.getIsDelete())); + lokasi.setLastUpdate(new Timestamp(System.currentTimeMillis())); + lokasiRepository.save(lokasi); + log.info("Success edit lokasi id {}", lokasi.getId()); + return LokasiResponse.builder() + .id(lokasi.getId()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/manajemenuser/DeleteUserService.java b/src/main/java/com/iconplus/smartproc/service/manajemenuser/DeleteUserService.java new file mode 100644 index 0000000..9b5b02f --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/manajemenuser/DeleteUserService.java @@ -0,0 +1,35 @@ +package com.iconplus.smartproc.service.manajemenuser; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.UsersRequest; +import com.iconplus.smartproc.repository.UsersRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +@Service +public class DeleteUserService implements BaseService { + + private UsersRepository usersRepository; + + public DeleteUserService(UsersRepository usersRepository) { + this.usersRepository = usersRepository; + } + + @Override + public EmptyResponse execute(UsersRequest input) { + + var users = usersRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "User", input.getId()))); + + users.setIsDelete(true); + usersRepository.save(users); + + return new EmptyResponse(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/manajemenuser/GetListUserService.java b/src/main/java/com/iconplus/smartproc/service/manajemenuser/GetListUserService.java new file mode 100644 index 0000000..de3aa5e --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/manajemenuser/GetListUserService.java @@ -0,0 +1,71 @@ +package com.iconplus.smartproc.service.manajemenuser; + +import com.iconplus.smartproc.helper.model.Pagination; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.projection.UserRoleView; +import com.iconplus.smartproc.model.request.UsersRequest; +import com.iconplus.smartproc.model.response.GetUsersResponse; +import com.iconplus.smartproc.model.response.UsersResponse; +import com.iconplus.smartproc.repository.UsersRepository; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +@Slf4j +public class GetListUserService implements BaseService { + + private UsersRepository usersRepository; + + public GetListUserService(UsersRepository usersRepository) { + this.usersRepository = usersRepository; + } + + @Override + public GetUsersResponse execute(UsersRequest input) { + validateRequest(input); + List usersResponses = new ArrayList<>(); + var userRoleViews = usersRepository.getAllUsersAndDeletedFase(input.getEmail(), input.getPageable()); + + for (UserRoleView userRoleView : userRoleViews) { + UsersResponse usersResponse = UsersResponse.builder() + .id(userRoleView.getId()) + .nama(userRoleView.getNama()) + .username(userRoleView.getUsername()) + .jabatanId(userRoleView.getJabatanId()) + .jabatan(userRoleView.getJabatan()) + .roleId(userRoleView.getRoleId()) + .role(userRoleView.getRole()) + .bidangId(userRoleView.getBidangId()) + .bidang(userRoleView.getBidang()) + .instansiId(userRoleView.getInstansiId()) + .instansi(userRoleView.getInstansi()) + .email(userRoleView.getEmail()) + .telepon(userRoleView.getTelepon()) + .isActive(userRoleView.getIsActive()) + .build(); + usersResponses.add(usersResponse); + } + + return GetUsersResponse.builder() + .data(usersResponses) + .pagination(Pagination.builder() + .pageSize(input.getPageable().getPageSize()) + .currentPage(input.getPageable().getPageNumber()) + .totalPages(userRoleViews.getTotalPages()) + .totalRecords(userRoleViews.getTotalElements()) + .isFirstPage(userRoleViews.isFirst()) + .isLastPage(userRoleViews.isLast()) + .build()) + .build(); + } + + private void validateRequest(UsersRequest input) { + if (StringUtils.isNotBlank(input.getSearch())) { + input.setSearch('%'+ input.getSearch().toUpperCase()+'%'); + } + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/manajemenuser/GetUserByIdService.java b/src/main/java/com/iconplus/smartproc/service/manajemenuser/GetUserByIdService.java new file mode 100644 index 0000000..f71a8ba --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/manajemenuser/GetUserByIdService.java @@ -0,0 +1,47 @@ +package com.iconplus.smartproc.service.manajemenuser; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.UsersRequest; +import com.iconplus.smartproc.model.response.UsersResponse; +import com.iconplus.smartproc.repository.UsersRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +@Service +public class GetUserByIdService implements BaseService { + + private UsersRepository usersRepository; + + public GetUserByIdService(UsersRepository usersRepository) { + this.usersRepository = usersRepository; + } + + @Override + public UsersResponse execute(UsersRequest input) { + + var userRoleView = usersRepository.getUserByIdAndDeletedFase(input.getId()) + .orElseThrow(() -> new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "User", input.getId()))); + + return UsersResponse.builder() + .id(userRoleView.getId()) + .nama(userRoleView.getNama()) + .username(userRoleView.getUsername()) + .jabatanId(userRoleView.getJabatanId()) + .jabatan(userRoleView.getJabatan()) + .roleId(userRoleView.getRoleId()) + .role(userRoleView.getRole()) + .bidangId(userRoleView.getBidangId()) + .bidang(userRoleView.getBidang()) + .instansiId(userRoleView.getInstansiId()) + .instansi(userRoleView.getInstansi()) + .email(userRoleView.getEmail()) + .telepon(userRoleView.getTelepon()) + .isActive(userRoleView.getIsActive()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/manajemenuser/PostCreateUserService.java b/src/main/java/com/iconplus/smartproc/service/manajemenuser/PostCreateUserService.java new file mode 100644 index 0000000..bea21da --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/manajemenuser/PostCreateUserService.java @@ -0,0 +1,77 @@ +package com.iconplus.smartproc.service.manajemenuser; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.Users; +import com.iconplus.smartproc.model.request.UsersRequest; + +import com.iconplus.smartproc.model.response.UsersResponse; +import com.iconplus.smartproc.repository.UsersRepository; +import com.iconplus.smartproc.service.CommonService; +import com.iconplus.smartproc.util.Constants; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpStatus; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.stereotype.Service; + +@Service +public class PostCreateUserService implements BaseService { + + @Value("${config.password.default-password:plngg123}") + private String defaultPassword; + + private UsersRepository usersRepository; + private CommonService commonService; + + public PostCreateUserService(UsersRepository usersRepository, + CommonService commonService) { + this.usersRepository = usersRepository; + this.commonService = commonService; + } + + @Override + public UsersResponse execute(UsersRequest input) { + + var users = usersRepository.findByEmailAndIsDeleteFalse(input.getEmail()); + if (users.isPresent()) { + throw new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10002, + Constants.ERR_TTL_10002, + String.format(Constants.ERR_MSG_10002, "User", input.getEmail())); + } + + commonService.validateUserRequst(input); + + String password = null; + if (StringUtils.isNotBlank(input.getPassword())) { + password = commonService.getPassword(input.getPassword()); + } else { + password = defaultPassword; + } + + BCryptPasswordEncoder encoder = new BCryptPasswordEncoder(); + String encryptedPassword = encoder.encode(password); + input.setPassword(encryptedPassword); + + Users usersEntity = Users.builder() + .instansiId(input.getInstansiId()) + .bidangId(input.getBidangId()) + .nama(input.getNama()) + .username(input.getUsername()) + .jabatanId(input.getJabatanId()) + .roleId(input.getRoleId()) + .email(input.getEmail()) + .telepon(input.getTelepon()) + .password(input.getPassword()) + .isActive(input.getIsActive()) + .isDelete(false) + .build(); + + var result = usersRepository.save(usersEntity); + return UsersResponse.builder() + .id(result.getId()) + .build(); + + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/manajemenuser/PutUpdateUserService.java b/src/main/java/com/iconplus/smartproc/service/manajemenuser/PutUpdateUserService.java new file mode 100644 index 0000000..4691d37 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/manajemenuser/PutUpdateUserService.java @@ -0,0 +1,51 @@ +package com.iconplus.smartproc.service.manajemenuser; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.UsersRequest; +import com.iconplus.smartproc.model.response.UsersResponse; +import com.iconplus.smartproc.repository.UsersRepository; +import com.iconplus.smartproc.service.CommonService; +import com.iconplus.smartproc.util.Constants; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +@Service +public class PutUpdateUserService implements BaseService { + + private UsersRepository usersRepository; + private CommonService commonService; + + public PutUpdateUserService(UsersRepository usersRepository, + CommonService commonService) { + this.usersRepository = usersRepository; + this.commonService = commonService; + } + @Override + public UsersResponse execute(UsersRequest input) { + + var users = usersRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "User", input.getId()))); + + commonService.validateUserRequst(input); + + users.setInstansiId(input.getInstansiId()); + users.setBidangId(input.getBidangId()); + users.setNama(input.getNama()); + users.setUsername(input.getUsername()); + users.setJabatanId(input.getJabatanId()); + users.setRoleId(input.getRoleId()); + users.setEmail(input.getEmail()); + users.setTelepon(input.getTelepon()); + users.setPassword(input.getPassword()); + users.setIsActive(input.getIsActive()); + users.setIsDelete(false); + var result = usersRepository.save(users); + return UsersResponse.builder() + .id(result.getId()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/metodepengadaan/DeleteMetodePengadaanService.java b/src/main/java/com/iconplus/smartproc/service/metodepengadaan/DeleteMetodePengadaanService.java new file mode 100644 index 0000000..5e18d43 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/metodepengadaan/DeleteMetodePengadaanService.java @@ -0,0 +1,38 @@ +package com.iconplus.smartproc.service.metodepengadaan; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.MetodePengadaanRequest; +import com.iconplus.smartproc.repository.MetodePengadaanRepository; +import com.iconplus.smartproc.util.Constants; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +@Service +@Slf4j +public class DeleteMetodePengadaanService implements BaseService { + + private MetodePengadaanRepository metodePengadaanRepository; + + public DeleteMetodePengadaanService(MetodePengadaanRepository metodePengadaanRepository) { + this.metodePengadaanRepository = metodePengadaanRepository; + } + + + @Override + public EmptyResponse execute(MetodePengadaanRequest input) { + + var metodePengadaan = metodePengadaanRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "Metode Pengadaan", input.getId()))); + + metodePengadaan.setIsDelete(true); + metodePengadaanRepository.save(metodePengadaan); + log.info("success delete metode pengadaan id {}", metodePengadaan.getIsDelete()); + return new EmptyResponse(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/metodepengadaan/GetListMetodePengadaanService.java b/src/main/java/com/iconplus/smartproc/service/metodepengadaan/GetListMetodePengadaanService.java new file mode 100644 index 0000000..8669c5d --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/metodepengadaan/GetListMetodePengadaanService.java @@ -0,0 +1,61 @@ +package com.iconplus.smartproc.service.metodepengadaan; + +import com.iconplus.smartproc.helper.model.Pagination; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.projection.MetodePengadaanView; +import com.iconplus.smartproc.model.request.MetodePengadaanRequest; +import com.iconplus.smartproc.model.response.GetListMetodePengadaanResponse; +import com.iconplus.smartproc.model.response.MetodePengadaanResponse; +import com.iconplus.smartproc.repository.MetodePengadaanRepository; +import org.apache.commons.lang3.StringUtils; +import org.springframework.data.domain.Page; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class GetListMetodePengadaanService implements BaseService { + + private MetodePengadaanRepository metodePengadaanRepository; + + public GetListMetodePengadaanService(MetodePengadaanRepository metodePengadaanRepository) { + this.metodePengadaanRepository = metodePengadaanRepository; + } + + @Override + public GetListMetodePengadaanResponse execute(MetodePengadaanRequest input) { + validateRequest(input); + List metodePengadaanResponseList = new ArrayList<>(); + Page metodePengadaanViews = metodePengadaanRepository.getAllMetodePengadaan(input.getSearch(), input.getPageable()); + + for (MetodePengadaanView metodePengadaanView : metodePengadaanViews) { + MetodePengadaanResponse metodePengadaanResponse = MetodePengadaanResponse.builder() + .id(metodePengadaanView.getId()) + .metodePengadaan(metodePengadaanView.getMetodePengadaan()) + .keterangan(metodePengadaanView.getKeterangan()) + .isActive(metodePengadaanView.getIsActive()) + .isDelete(metodePengadaanView.getIsDelete()) + .build(); + metodePengadaanResponseList.add(metodePengadaanResponse); + } + + return GetListMetodePengadaanResponse.builder() + .data(metodePengadaanResponseList) + .pagination(Pagination.builder() + .pageSize(input.getPageable().getPageSize()) + .currentPage(input.getPageable().getPageNumber()) + .totalPages(metodePengadaanViews.getTotalPages()) + .totalRecords(metodePengadaanViews.getTotalElements()) + .isFirstPage(metodePengadaanViews.isFirst()) + .isLastPage(metodePengadaanViews.isLast()) + .build()) + .build(); + } + + private void validateRequest(MetodePengadaanRequest input) { + if (StringUtils.isNotBlank(input.getSearch())) { + input.setSearch('%'+ input.getSearch().toUpperCase()+'%'); + } + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/metodepengadaan/GetMetodePengadaanByIdService.java b/src/main/java/com/iconplus/smartproc/service/metodepengadaan/GetMetodePengadaanByIdService.java new file mode 100644 index 0000000..4213983 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/metodepengadaan/GetMetodePengadaanByIdService.java @@ -0,0 +1,40 @@ +package com.iconplus.smartproc.service.metodepengadaan; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.MetodePengadaanRequest; +import com.iconplus.smartproc.model.response.MetodePengadaanResponse; +import com.iconplus.smartproc.repository.MetodePengadaanRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +@Service +public class GetMetodePengadaanByIdService implements BaseService { + + private final MetodePengadaanRepository metodePengadaanRepository; + + public GetMetodePengadaanByIdService(MetodePengadaanRepository metodePengadaanRepository) { + this.metodePengadaanRepository = metodePengadaanRepository; + } + + @Override + public MetodePengadaanResponse execute(MetodePengadaanRequest input) { + + var metodePengadaanView = metodePengadaanRepository.findByIdAndIsDeleteFalse(input.getId()); + if (metodePengadaanView.isEmpty()) { + throw new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "Metode Pengadaan", input.getId())); + } + + return MetodePengadaanResponse.builder() + .id(metodePengadaanView.get().getId()) + .metodePengadaan(metodePengadaanView.get().getMetodePengadaan()) + .keterangan(metodePengadaanView.get().getKeterangan()) + .isActive(metodePengadaanView.get().getIsActive()) + .isDelete(metodePengadaanView.get().getIsDelete()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/metodepengadaan/PostCreateMetodePengadaanService.java b/src/main/java/com/iconplus/smartproc/service/metodepengadaan/PostCreateMetodePengadaanService.java new file mode 100644 index 0000000..391d650 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/metodepengadaan/PostCreateMetodePengadaanService.java @@ -0,0 +1,49 @@ +package com.iconplus.smartproc.service.metodepengadaan; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.MetodePengadaan; +import com.iconplus.smartproc.model.request.MetodePengadaanRequest; +import com.iconplus.smartproc.model.response.MetodePengadaanResponse; +import com.iconplus.smartproc.repository.MetodePengadaanRepository; +import com.iconplus.smartproc.util.Constants; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +@Service +@Slf4j +public class PostCreateMetodePengadaanService implements BaseService { + + private final MetodePengadaanRepository metodePengadaanRepository; + + public PostCreateMetodePengadaanService(MetodePengadaanRepository metodePengadaanRepository) { + this.metodePengadaanRepository = metodePengadaanRepository; + } + + @Override + public MetodePengadaanResponse execute(MetodePengadaanRequest input) { + + var existMetodePengadaan = metodePengadaanRepository.findByMetodePengadaanAndIsDeleteFalse(input.getMetodePengadaan()); + if (existMetodePengadaan.isPresent()) { + throw new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10002, + Constants.ERR_TTL_10002, + String.format(Constants.ERR_MSG_10002, "Metode Pengadaan", input.getMetodePengadaan())); + } + + MetodePengadaan metodePengadaan = MetodePengadaan.builder() + .metodePengadaan(input.getMetodePengadaan()) + .keterangan(input.getKeterangan()) + .isActive(input.getIsActive()) + .isDelete(false) + .build(); + + var result = metodePengadaanRepository.save(metodePengadaan); + log.info("success insert metode pengadaan id : {}", result.getId()); + return MetodePengadaanResponse.builder() + .id(result.getId()) + .build(); + + } +} \ No newline at end of file diff --git a/src/main/java/com/iconplus/smartproc/service/metodepengadaan/PutUpdateMetodePengadaanService.java b/src/main/java/com/iconplus/smartproc/service/metodepengadaan/PutUpdateMetodePengadaanService.java new file mode 100644 index 0000000..1f6aea0 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/metodepengadaan/PutUpdateMetodePengadaanService.java @@ -0,0 +1,41 @@ +package com.iconplus.smartproc.service.metodepengadaan; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.MetodePengadaanRequest; +import com.iconplus.smartproc.model.response.MetodePengadaanResponse; +import com.iconplus.smartproc.repository.MetodePengadaanRepository; +import com.iconplus.smartproc.util.Constants; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +@Service +@Slf4j +public class PutUpdateMetodePengadaanService implements BaseService { + + private MetodePengadaanRepository metodePengadaanRepository; + + public PutUpdateMetodePengadaanService(MetodePengadaanRepository metodePengadaanRepository) { + this.metodePengadaanRepository = metodePengadaanRepository; + } + + @Override + public MetodePengadaanResponse execute(MetodePengadaanRequest input) { + + var metodePengadaan = metodePengadaanRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "Metode Pengadaan", input.getId()))); + + metodePengadaan.setMetodePengadaan(input.getMetodePengadaan()); + metodePengadaan.setKeterangan(input.getKeterangan()); + metodePengadaan.setIsActive(input.getIsActive()); + metodePengadaanRepository.save(metodePengadaan); + log.info("Success edit metode pengadaan id {}", metodePengadaan.getId()); + return MetodePengadaanResponse.builder() + .id(metodePengadaan.getId()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/metodepenyampaian/DeleteMetodePenyampaianService.java b/src/main/java/com/iconplus/smartproc/service/metodepenyampaian/DeleteMetodePenyampaianService.java new file mode 100644 index 0000000..6c7ff06 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/metodepenyampaian/DeleteMetodePenyampaianService.java @@ -0,0 +1,38 @@ +package com.iconplus.smartproc.service.metodepenyampaian; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.MetodePenyampaianRequest; +import com.iconplus.smartproc.repository.MetodePenyampaianRepository; +import com.iconplus.smartproc.util.Constants; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +@Service +@Slf4j +public class DeleteMetodePenyampaianService implements BaseService { + + private MetodePenyampaianRepository metodePenyampaianRepository; + + public DeleteMetodePenyampaianService(MetodePenyampaianRepository metodePenyampaianRepository) { + this.metodePenyampaianRepository = metodePenyampaianRepository; + } + + + @Override + public EmptyResponse execute(MetodePenyampaianRequest input) { + + var metodePenyampaian = metodePenyampaianRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "Metode Penyampaian", input.getId()))); + + metodePenyampaian.setIsDelete(true); + metodePenyampaianRepository.save(metodePenyampaian); + log.info("success delete metode penyampaian id {}", metodePenyampaian.getIsDelete()); + return new EmptyResponse(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/metodepenyampaian/GetListMetodePenyampaianService.java b/src/main/java/com/iconplus/smartproc/service/metodepenyampaian/GetListMetodePenyampaianService.java new file mode 100644 index 0000000..32d68a3 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/metodepenyampaian/GetListMetodePenyampaianService.java @@ -0,0 +1,61 @@ +package com.iconplus.smartproc.service.metodepenyampaian; + +import com.iconplus.smartproc.helper.model.Pagination; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.projection.MetodePenyampaianView; +import com.iconplus.smartproc.model.request.MetodePenyampaianRequest; +import com.iconplus.smartproc.model.response.GetListMetodePenyampaianResponse; +import com.iconplus.smartproc.model.response.MetodePenyampaianResponse; +import com.iconplus.smartproc.repository.MetodePenyampaianRepository; +import org.apache.commons.lang3.StringUtils; +import org.springframework.data.domain.Page; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class GetListMetodePenyampaianService implements BaseService { + + private MetodePenyampaianRepository metodePenyampaianRepository; + + public GetListMetodePenyampaianService(MetodePenyampaianRepository metodePenyampaianRepository) { + this.metodePenyampaianRepository = metodePenyampaianRepository; + } + + @Override + public GetListMetodePenyampaianResponse execute(MetodePenyampaianRequest input) { + validateRequest(input); + List metodePenyampaianResponseList = new ArrayList<>(); + Page metodePenyampaianViews = metodePenyampaianRepository.getAllMetodePenyampaian(input.getSearch(), input.getPageable()); + + for (MetodePenyampaianView metodePenyampaianView : metodePenyampaianViews) { + MetodePenyampaianResponse metodePenyampaianResponse = MetodePenyampaianResponse.builder() + .id(metodePenyampaianView.getId()) + .metodePenyampaian(metodePenyampaianView.getMetodePenyampaian()) + .keterangan(metodePenyampaianView.getKeterangan()) + .isActive(metodePenyampaianView.getIsActive()) + .isDelete(metodePenyampaianView.getIsDelete()) + .build(); + metodePenyampaianResponseList.add(metodePenyampaianResponse); + } + + return GetListMetodePenyampaianResponse.builder() + .data(metodePenyampaianResponseList) + .pagination(Pagination.builder() + .pageSize(input.getPageable().getPageSize()) + .currentPage(input.getPageable().getPageNumber()) + .totalPages(metodePenyampaianViews.getTotalPages()) + .totalRecords(metodePenyampaianViews.getTotalElements()) + .isFirstPage(metodePenyampaianViews.isFirst()) + .isLastPage(metodePenyampaianViews.isLast()) + .build()) + .build(); + } + + private void validateRequest(MetodePenyampaianRequest input) { + if (StringUtils.isNotBlank(input.getSearch())) { + input.setSearch('%'+ input.getSearch().toUpperCase()+'%'); + } + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/metodepenyampaian/GetMetodePenyampaianByIdService.java b/src/main/java/com/iconplus/smartproc/service/metodepenyampaian/GetMetodePenyampaianByIdService.java new file mode 100644 index 0000000..2612420 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/metodepenyampaian/GetMetodePenyampaianByIdService.java @@ -0,0 +1,39 @@ +package com.iconplus.smartproc.service.metodepenyampaian; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.MetodePenyampaianRequest; +import com.iconplus.smartproc.model.response.MetodePenyampaianResponse; +import com.iconplus.smartproc.repository.MetodePenyampaianRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +@Service +public class GetMetodePenyampaianByIdService implements BaseService { + + private final MetodePenyampaianRepository metodePenyampaianRepository; + + public GetMetodePenyampaianByIdService(MetodePenyampaianRepository metodePenyampaianRepository) { + this.metodePenyampaianRepository = metodePenyampaianRepository; + } + + @Override + public MetodePenyampaianResponse execute(MetodePenyampaianRequest input) { + var metodePenyampaianView = metodePenyampaianRepository.findByIdAndIsDeleteFalse(input.getId()); + if (metodePenyampaianView.isEmpty()) { + throw new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "Metode Penyampaian", input.getId())); + } + + return MetodePenyampaianResponse.builder() + .id(metodePenyampaianView.get().getId()) + .metodePenyampaian(metodePenyampaianView.get().getMetodePenyampaian()) + .keterangan(metodePenyampaianView.get().getKeterangan()) + .isActive(metodePenyampaianView.get().getIsActive()) + .isDelete(metodePenyampaianView.get().getIsDelete()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/metodepenyampaian/PostCreateMetodePenyampaianService.java b/src/main/java/com/iconplus/smartproc/service/metodepenyampaian/PostCreateMetodePenyampaianService.java new file mode 100644 index 0000000..c8fef59 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/metodepenyampaian/PostCreateMetodePenyampaianService.java @@ -0,0 +1,49 @@ +package com.iconplus.smartproc.service.metodepenyampaian; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.MetodePenyampaian; +import com.iconplus.smartproc.model.request.MetodePenyampaianRequest; +import com.iconplus.smartproc.model.response.MetodePenyampaianResponse; +import com.iconplus.smartproc.repository.MetodePenyampaianRepository; +import com.iconplus.smartproc.util.Constants; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +@Service +@Slf4j +public class PostCreateMetodePenyampaianService implements BaseService { + + private final MetodePenyampaianRepository metodePenyampaianRepository; + + public PostCreateMetodePenyampaianService(MetodePenyampaianRepository metodePenyampaianRepository) { + this.metodePenyampaianRepository = metodePenyampaianRepository; + } + + @Override + public MetodePenyampaianResponse execute(MetodePenyampaianRequest input) { + + var existMetodePenyampaian = metodePenyampaianRepository.findByMetodePenyampaianAndIsDeleteFalse(input.getMetodePenyampaian()); + if (existMetodePenyampaian.isPresent()) { + throw new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10002, + Constants.ERR_TTL_10002, + String.format(Constants.ERR_MSG_10002, "Metode Penyampaian", input.getMetodePenyampaian())); + } + + MetodePenyampaian metodePenyampaian = MetodePenyampaian.builder() + .metodePenyampaian(input.getMetodePenyampaian()) + .keterangan(input.getKeterangan()) + .isActive(input.getIsActive()) + .isDelete(false) + .build(); + + var result = metodePenyampaianRepository.save(metodePenyampaian); + log.info("success insert metode penyampaian id : {}", result.getId()); + return MetodePenyampaianResponse.builder() + .id(result.getId()) + .build(); + + } +} \ No newline at end of file diff --git a/src/main/java/com/iconplus/smartproc/service/metodepenyampaian/PutUpdateMetodePenyampaianService.java b/src/main/java/com/iconplus/smartproc/service/metodepenyampaian/PutUpdateMetodePenyampaianService.java new file mode 100644 index 0000000..ae5be66 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/metodepenyampaian/PutUpdateMetodePenyampaianService.java @@ -0,0 +1,41 @@ +package com.iconplus.smartproc.service.metodepenyampaian; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.MetodePenyampaianRequest; +import com.iconplus.smartproc.model.response.MetodePenyampaianResponse; +import com.iconplus.smartproc.repository.MetodePenyampaianRepository; +import com.iconplus.smartproc.util.Constants; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +@Service +@Slf4j +public class PutUpdateMetodePenyampaianService implements BaseService { + + private MetodePenyampaianRepository metodePenyampaianRepository; + + public PutUpdateMetodePenyampaianService(MetodePenyampaianRepository metodePenyampaianRepository) { + this.metodePenyampaianRepository = metodePenyampaianRepository; + } + + @Override + public MetodePenyampaianResponse execute(MetodePenyampaianRequest input) { + + var metodePenyampaian = metodePenyampaianRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "Metode Penyampaian", input.getId()))); + + metodePenyampaian.setMetodePenyampaian(input.getMetodePenyampaian()); + metodePenyampaian.setKeterangan(input.getKeterangan()); + metodePenyampaian.setIsActive(input.getIsActive()); + metodePenyampaianRepository.save(metodePenyampaian); + log.info("Success edit metode penyampaian id {}", metodePenyampaian.getId()); + return MetodePenyampaianResponse.builder() + .id(metodePenyampaian.getId()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/permission/PutUpdatePermissionService.java b/src/main/java/com/iconplus/smartproc/service/permission/PutUpdatePermissionService.java new file mode 100644 index 0000000..c78458c --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/permission/PutUpdatePermissionService.java @@ -0,0 +1,91 @@ +package com.iconplus.smartproc.service.permission; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.Menus; +import com.iconplus.smartproc.model.entity.Permission; +import com.iconplus.smartproc.model.entity.Roles; +import com.iconplus.smartproc.model.request.ListPermissionRequest; +import com.iconplus.smartproc.model.request.PermissionRequest; +import com.iconplus.smartproc.repository.MenusRepository; +import com.iconplus.smartproc.repository.PermissionRepository; +import com.iconplus.smartproc.repository.RolesRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +import javax.transaction.Transactional; +import java.util.ArrayList; +import java.util.List; + +@Service +public class PutUpdatePermissionService implements BaseService { + + private PermissionRepository permissionRepository; + private MenusRepository menusRepository; + private RolesRepository rolesRepository; + public PutUpdatePermissionService(PermissionRepository permissionRepository, + MenusRepository menusRepository, + RolesRepository rolesRepository) { + this.permissionRepository = permissionRepository; + this.menusRepository = menusRepository; + this.rolesRepository = rolesRepository; + } + + @Transactional + @Override + public EmptyResponse execute(ListPermissionRequest input) { + + Roles role = rolesRepository.findByIdAndIsDeleteFalse(input.getRoleId()) + .orElseThrow(() -> new BusinessException(Constants.ERR_CODE_10005, + Constants.ERR_TTL_10005, + String.format(Constants.ERR_MSG_10005, input.getRoleId()))); + + List permissionList = new ArrayList<>(); + + for (PermissionRequest permissionRequest : input.getData()) { + Permission permission = getPermission(permissionRequest, role); + permissionList.add(permission); + } + + permissionRepository.saveAll(permissionList); + + return new EmptyResponse(); + } + + public Menus findMenuById(Long menuId) { + var menus = menusRepository.findByIdAndIsDeleteFalse(menuId); + if (menus.isEmpty()) { + throw new BusinessException(HttpStatus.CONFLICT, + "err", + "err", + "err"); + } + return menus.get(); + } + + private Permission getPermission(PermissionRequest permissionRequest, Roles roles) { + var permission = permissionRepository.findByRoleIdAndMenuIdAndIsDeleteFalse(roles.getId(), permissionRequest.getMenuId()); + if (permission.isPresent()) { + permission.get().setCanView(permissionRequest.getCanView()); + permission.get().setCanRead(permissionRequest.getCanRead()); + permission.get().setCanCreate(permissionRequest.getCanCreate()); + permission.get().setCanUpdate(permissionRequest.getCanUpdate()); + permission.get().setCanDelete(permissionRequest.getCanDelete()); + return permission.get(); + } else { + return Permission.builder() + .roleId(roles.getId()) + .menuId(permissionRequest.getMenuId()) + .canView(permissionRequest.getCanView()) + .canRead(permissionRequest.getCanRead()) + .canCreate(permissionRequest.getCanCreate()) + .canUpdate(permissionRequest.getCanUpdate()) + .canDelete(permissionRequest.getCanDelete()) + .isDelete(false) + .build(); + } + } + +} diff --git a/src/main/java/com/iconplus/smartproc/service/print/DrpPrintExecutionService.java b/src/main/java/com/iconplus/smartproc/service/print/DrpPrintExecutionService.java new file mode 100644 index 0000000..a68d913 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/print/DrpPrintExecutionService.java @@ -0,0 +1,44 @@ +package com.iconplus.smartproc.service.print; + +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.projection.DrpApprovalView; +import com.iconplus.smartproc.model.request.PrintDrpRequest; +import com.iconplus.smartproc.repository.DrpApprovalRepository; +import com.iconplus.smartproc.service.CommonService; +import org.springframework.stereotype.Service; + +import java.awt.image.BufferedImage; +import java.util.ArrayList; +import java.util.List; + + +@Service +public class DrpPrintExecutionService implements BaseService { + + private final CommonService commonService; + private final DrpApprovalRepository drpApprovalRepository; + public DrpPrintExecutionService(CommonService commonService, + DrpApprovalRepository drpApprovalRepository) { + this.commonService = commonService; + this.drpApprovalRepository = drpApprovalRepository; + } + + @Override + public EmptyResponse execute(PrintDrpRequest input) throws Exception { + + var drpApprovalViews = drpApprovalRepository.getDrpApproval(input.getDrpId()); + + int size = drpApprovalViews.size(); + + List bufferedImageList = new ArrayList<>(); + + for (DrpApprovalView drpApprovalView : drpApprovalViews) { + String barcodeText = drpApprovalView.getApproverUserId().toString() + " - " + drpApprovalView.getNama() + " - " + drpApprovalView.getJabatan(); + var bufferedImage = commonService.generateQRCodeImage(barcodeText); + bufferedImageList.add(bufferedImage); + } + + return new EmptyResponse(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/print/GetListPrintDrpService.java b/src/main/java/com/iconplus/smartproc/service/print/GetListPrintDrpService.java new file mode 100644 index 0000000..e9e39fe --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/print/GetListPrintDrpService.java @@ -0,0 +1,71 @@ +package com.iconplus.smartproc.service.print; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.model.Pagination; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.projection.DrpView; +import com.iconplus.smartproc.model.request.PrintDrpRequest; +import com.iconplus.smartproc.model.response.GetListPrintDrpResponse; +import com.iconplus.smartproc.model.response.PrintDrpResponse; +import com.iconplus.smartproc.repository.DrpApprovalRepository; +import com.iconplus.smartproc.repository.DrpRepository; +import com.iconplus.smartproc.util.Constants; +import org.apache.commons.lang3.BooleanUtils; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class GetListPrintDrpService implements BaseService { + + private DrpRepository drpRepository; + private DrpApprovalRepository drpApprovalRepository; + public GetListPrintDrpService(DrpRepository drpRepository, + DrpApprovalRepository drpApprovalRepository) { + this.drpRepository = drpRepository; + this.drpApprovalRepository = drpApprovalRepository; + } + + + @Override + public GetListPrintDrpResponse execute(PrintDrpRequest input) { + + List printDrpResponseList = new ArrayList<>(); + + var drpViews = drpRepository.getListPrintDrp(input.getPageable()); + for (DrpView drpView : drpViews) { + PrintDrpResponse printDrpResponse = PrintDrpResponse.builder() + .id(drpView.getId()) + .tahun(drpView.getTahun()) + .printDate(drpView.getPrintDate()) + .build(); + + var drpApprovalOptional = drpApprovalRepository.findByDrpIdAndLevelAndIsDeleteFalse(drpView.getId(), "DIREKTUR") + .orElseThrow(()-> new BusinessException(Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "DRP Approvel", drpView.getId()))); + + if (BooleanUtils.isTrue(drpView.getIsPrint())) { + printDrpResponse.setStatus("Tercetak"); + } else if (drpApprovalOptional.getIsApprove() == null) { + printDrpResponse.setStatus("Belum Dicetak"); + } else { + printDrpResponse.setStatus("Belum Bisa Dicetak"); + } + printDrpResponseList.add(printDrpResponse); + } + + return GetListPrintDrpResponse.builder() + .data(printDrpResponseList) + .pagination(Pagination.builder() + .pageSize(input.getPageable().getPageSize()) + .currentPage(input.getPageable().getPageNumber()) + .totalPages(drpViews.getTotalPages()) + .totalRecords(drpViews.getTotalElements()) + .isFirstPage(drpViews.isFirst()) + .isLastPage(drpViews.isLast()) + .build()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/rksdaftarisi/DeleteRksDaftarIsiService.java b/src/main/java/com/iconplus/smartproc/service/rksdaftarisi/DeleteRksDaftarIsiService.java new file mode 100644 index 0000000..73df695 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/rksdaftarisi/DeleteRksDaftarIsiService.java @@ -0,0 +1,37 @@ +package com.iconplus.smartproc.service.rksdaftarisi; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.RksDaftarIsiRequest; +import com.iconplus.smartproc.repository.RksDaftarIsiRepository; +import com.iconplus.smartproc.repository.RksIsiRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.stereotype.Service; + +@Service +public class DeleteRksDaftarIsiService implements BaseService { + + private final RksDaftarIsiRepository rksDaftarIsiRepository; + private final RksIsiRepository rksIsiRepository; + public DeleteRksDaftarIsiService(RksDaftarIsiRepository rksDaftarIsiRepository, + RksIsiRepository rksIsiRepository) { + this.rksDaftarIsiRepository = rksDaftarIsiRepository; + this.rksIsiRepository = rksIsiRepository; + } + + @Override + public EmptyResponse execute(RksDaftarIsiRequest input) { + + var rksDaftarIsi= rksDaftarIsiRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "RKS Daftar Isi", input.getId()))); + + rksDaftarIsi.setIsDelete(true); + rksDaftarIsiRepository.save(rksDaftarIsi); + rksIsiRepository.deleteRksIsi(rksDaftarIsi.getId()); + + return new EmptyResponse(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/rksdaftarisi/GetListRksDaftarIsiService.java b/src/main/java/com/iconplus/smartproc/service/rksdaftarisi/GetListRksDaftarIsiService.java new file mode 100644 index 0000000..9373727 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/rksdaftarisi/GetListRksDaftarIsiService.java @@ -0,0 +1,52 @@ +package com.iconplus.smartproc.service.rksdaftarisi; + +import com.iconplus.smartproc.helper.model.Pagination; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.projection.RksDaftarIsiView; +import com.iconplus.smartproc.model.request.RksDaftarIsiRequest; +import com.iconplus.smartproc.model.response.ListRksDaftarIsiResponse; +import com.iconplus.smartproc.model.response.RksDaftarIsiResponse; +import com.iconplus.smartproc.repository.RksDaftarIsiRepository; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class GetListRksDaftarIsiService implements BaseService { + + private final RksDaftarIsiRepository rksDaftarIsiRepository; + public GetListRksDaftarIsiService(RksDaftarIsiRepository rksDaftarIsiRepository) { + this.rksDaftarIsiRepository = rksDaftarIsiRepository; + } + + @Override + public ListRksDaftarIsiResponse execute(RksDaftarIsiRequest input) { + + List rksDaftarIsiResponseList = new ArrayList<>(); + var rksDaftarIsiViews= rksDaftarIsiRepository.getListRksDaftarIsi(input.getPageable()); + for (RksDaftarIsiView rksDaftarIsiView : rksDaftarIsiViews) { + RksDaftarIsiResponse rksDaftarIsiResponse = RksDaftarIsiResponse.builder() + .id(rksDaftarIsiView.getId()) + .kodeTemplate(rksDaftarIsiView.getKodeTemplate()) + .namaTemplate(rksDaftarIsiView.getNamaTemplate()) + .metodePengadaanId(rksDaftarIsiView.getMetodePengadaanId()) + .metodePengadaan(rksDaftarIsiView.getMetodePengadaan()) + .versi(rksDaftarIsiView.getVersi()) + .build(); + rksDaftarIsiResponseList.add(rksDaftarIsiResponse); + } + + return ListRksDaftarIsiResponse.builder() + .data(rksDaftarIsiResponseList) + .pagination(Pagination.builder() + .pageSize(input.getPageable().getPageSize()) + .currentPage(input.getPageable().getPageNumber()) + .totalPages(rksDaftarIsiViews.getTotalPages()) + .totalRecords(rksDaftarIsiViews.getTotalElements()) + .isFirstPage(rksDaftarIsiViews.isFirst()) + .isLastPage(rksDaftarIsiViews.isLast()) + .build()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/rksdaftarisi/GetListRksIsiService.java b/src/main/java/com/iconplus/smartproc/service/rksdaftarisi/GetListRksIsiService.java new file mode 100644 index 0000000..7be02c0 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/rksdaftarisi/GetListRksIsiService.java @@ -0,0 +1,56 @@ +package com.iconplus.smartproc.service.rksdaftarisi; + +import com.iconplus.smartproc.helper.model.Pagination; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.RksIsi; +import com.iconplus.smartproc.model.request.RksIsiRequest; +import com.iconplus.smartproc.model.response.ListRksIsiResponse; +import com.iconplus.smartproc.model.response.RksIsiResponse; +import com.iconplus.smartproc.repository.RksIsiRepository; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class GetListRksIsiService implements BaseService { + + private final RksIsiRepository rksIsiRepository; + + public GetListRksIsiService(RksIsiRepository rksIsiRepository) { + this.rksIsiRepository = rksIsiRepository; + } + + @Override + public ListRksIsiResponse execute(RksIsiRequest input) { + + List rksIsiResponseList = new ArrayList<>(); + var rksIsis = rksIsiRepository.findByRksDaftarIsiIdAndIsDeleteFalse(input.getRksDaftarIsiId(), input.getPageable()); + for (RksIsi rksIsi : rksIsis) { + RksIsiResponse rksIsiResponse = RksIsiResponse.builder() + .id(rksIsi.getId()) + .rksDaftarIsiId(rksIsi.getRksDaftarIsiId()) + .nomor(rksIsi.getNomor()) + .parentId(rksIsi.getParentId()) + .nama(rksIsi.getNama()) + .bab(rksIsi.getBab()) + .subBab(rksIsi.getSubBab()) + .urutan(rksIsi.getUrutan()) + .isKontrak(rksIsi.getIsKontrak()) + .build(); + rksIsiResponseList.add(rksIsiResponse); + } + + return ListRksIsiResponse.builder() + .data(rksIsiResponseList) + .pagination(Pagination.builder() + .pageSize(input.getPageable().getPageSize()) + .currentPage(input.getPageable().getPageNumber()) + .totalPages(rksIsis.getTotalPages()) + .totalRecords(rksIsis.getTotalElements()) + .isFirstPage(rksIsis.isFirst()) + .isLastPage(rksIsis.isLast()) + .build()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/rksdaftarisi/PostCreateRksDaftarIsiService.java b/src/main/java/com/iconplus/smartproc/service/rksdaftarisi/PostCreateRksDaftarIsiService.java new file mode 100644 index 0000000..9ce43f1 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/rksdaftarisi/PostCreateRksDaftarIsiService.java @@ -0,0 +1,44 @@ +package com.iconplus.smartproc.service.rksdaftarisi; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.RksDaftarIsi; +import com.iconplus.smartproc.model.request.RksDaftarIsiRequest; +import com.iconplus.smartproc.model.response.RksDaftarIsiResponse; +import com.iconplus.smartproc.repository.RksDaftarIsiRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.stereotype.Service; + +@Service +public class PostCreateRksDaftarIsiService implements BaseService { + + private final RksDaftarIsiRepository rksDaftarIsiRepository; + public PostCreateRksDaftarIsiService(RksDaftarIsiRepository rksDaftarIsiRepository) { + this.rksDaftarIsiRepository = rksDaftarIsiRepository; + } + + @Override + public RksDaftarIsiResponse execute(RksDaftarIsiRequest input) { + + var rksDaftarIsiOptional = rksDaftarIsiRepository.findByKodeTemplateAndIsDeleteFalse(input.getKodeTemplate()); + if (rksDaftarIsiOptional.isPresent()) { + throw new BusinessException(Constants.ERR_CODE_10002, + Constants.ERR_TTL_10002, + String.format(Constants.ERR_MSG_10002, "RKS Kode Template", input.getKodeTemplate())); + } + + + RksDaftarIsi rksDaftarIsi = RksDaftarIsi.builder() + .kodeTemplate(input.getKodeTemplate()) + .namaTemplate(input.getNamaTemplate()) + .metodePengadaanId(input.getMetodePengadaanId()) + .versi(input.getVersi()) + .isDelete(false) + .build(); + + var result = rksDaftarIsiRepository.save(rksDaftarIsi); + return RksDaftarIsiResponse.builder() + .id(result.getId()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/rksdaftarisi/PutUpdateRksDaftarIsiService.java b/src/main/java/com/iconplus/smartproc/service/rksdaftarisi/PutUpdateRksDaftarIsiService.java new file mode 100644 index 0000000..b6ed2fc --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/rksdaftarisi/PutUpdateRksDaftarIsiService.java @@ -0,0 +1,38 @@ +package com.iconplus.smartproc.service.rksdaftarisi; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.RksDaftarIsiRequest; +import com.iconplus.smartproc.model.response.RksDaftarIsiResponse; +import com.iconplus.smartproc.repository.RksDaftarIsiRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.stereotype.Service; + +@Service +public class PutUpdateRksDaftarIsiService implements BaseService { + + private final RksDaftarIsiRepository rksDaftarIsiRepository; + public PutUpdateRksDaftarIsiService(RksDaftarIsiRepository rksDaftarIsiRepository) { + this.rksDaftarIsiRepository = rksDaftarIsiRepository; + } + + @Override + public RksDaftarIsiResponse execute(RksDaftarIsiRequest input) { + + var rksDaftarIsi= rksDaftarIsiRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "RKS Daftar Isi", input.getId()))); + + rksDaftarIsi.setKodeTemplate(input.getKodeTemplate()); + rksDaftarIsi.setNamaTemplate(input.getNamaTemplate()); + rksDaftarIsi.setMetodePengadaanId(input.getMetodePengadaanId()); + rksDaftarIsi.setVersi(input.getVersi()); + + rksDaftarIsiRepository.save(rksDaftarIsi); + + return RksDaftarIsiResponse.builder() + .id(rksDaftarIsi.getId()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/rkstemplate/DeleteRksTemplateService.java b/src/main/java/com/iconplus/smartproc/service/rkstemplate/DeleteRksTemplateService.java new file mode 100644 index 0000000..c203772 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/rkstemplate/DeleteRksTemplateService.java @@ -0,0 +1,34 @@ +package com.iconplus.smartproc.service.rkstemplate; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.RksTemplateRequest; +import com.iconplus.smartproc.repository.RksTemplateRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.stereotype.Service; + +@Service +public class DeleteRksTemplateService implements BaseService { + + private final RksTemplateRepository rksTemplateRepository; + + public DeleteRksTemplateService(RksTemplateRepository rksTemplateRepository) { + this.rksTemplateRepository = rksTemplateRepository; + } + + @Override + public EmptyResponse execute(RksTemplateRequest input) { + var rksTemplate = rksTemplateRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(()-> new BusinessException( + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "RKS Template", input.getId()) + )); + + rksTemplate.setIsDelete(true); + rksTemplateRepository.save(rksTemplate); + + return new EmptyResponse(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/rkstemplate/GetListRksTemplateService.java b/src/main/java/com/iconplus/smartproc/service/rkstemplate/GetListRksTemplateService.java new file mode 100644 index 0000000..ccf4b4b --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/rkstemplate/GetListRksTemplateService.java @@ -0,0 +1,56 @@ +package com.iconplus.smartproc.service.rkstemplate; + +import com.iconplus.smartproc.helper.model.Pagination; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.projection.RksTemplateView; +import com.iconplus.smartproc.model.request.RksTemplateRequest; +import com.iconplus.smartproc.model.response.ListRksTemplateResponse; +import com.iconplus.smartproc.model.response.RksTemplateResponse; +import com.iconplus.smartproc.repository.RksTemplateRepository; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class GetListRksTemplateService implements BaseService { + + private final RksTemplateRepository rksTemplateRepository; + public GetListRksTemplateService(RksTemplateRepository rksTemplateRepository) { + this.rksTemplateRepository = rksTemplateRepository; + } + + @Override + public ListRksTemplateResponse execute(RksTemplateRequest input) { + + var rksTemplateViews = rksTemplateRepository.getListRksTemplate(input.getPageable()); + + List rksTemplateResponseList = new ArrayList<>(); + for (RksTemplateView rksTemplateView : rksTemplateViews) { + RksTemplateResponse rksTemplateResponse = RksTemplateResponse.builder() + .id(rksTemplateView.getId()) + .kodeTemplate(rksTemplateView.getKodeTemplate()) + .namaTemplate(rksTemplateView.getNamaTemplate()) + .metodePengadaanId(rksTemplateView.getMetodePengadaanId()) + .metodePengadaan(rksTemplateView.getMetodePengadaan()) + .versi(rksTemplateView.getVersi()) + .rksDaftarIsiId(rksTemplateView.getRksDaftarIsiId()) + .daftarIsi(rksTemplateView.getDaftarIsi()) + .isActive(rksTemplateView.getIsActive()) + .build(); + rksTemplateResponseList.add(rksTemplateResponse); + } + + return ListRksTemplateResponse.builder() + .data(rksTemplateResponseList) + .pagination(Pagination.builder() + .pageSize(input.getPageable().getPageSize()) + .currentPage(input.getPageable().getPageNumber()) + .totalPages(rksTemplateViews.getTotalPages()) + .totalRecords(rksTemplateViews.getTotalElements()) + .isFirstPage(rksTemplateViews.isFirst()) + .isLastPage(rksTemplateViews.isLast()) + .build()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/rkstemplate/PostCreateRksTemplateService.java b/src/main/java/com/iconplus/smartproc/service/rkstemplate/PostCreateRksTemplateService.java new file mode 100644 index 0000000..69d0fcc --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/rkstemplate/PostCreateRksTemplateService.java @@ -0,0 +1,47 @@ +package com.iconplus.smartproc.service.rkstemplate; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.RksTemplate; +import com.iconplus.smartproc.model.request.RksTemplateRequest; +import com.iconplus.smartproc.model.response.RksTemplateResponse; +import com.iconplus.smartproc.repository.RksTemplateRepository; +import com.iconplus.smartproc.util.Constants; +import org.apache.commons.lang3.BooleanUtils; +import org.springframework.stereotype.Service; + +@Service +public class PostCreateRksTemplateService implements BaseService { + + private final RksTemplateRepository rksTemplateRepository; + public PostCreateRksTemplateService(RksTemplateRepository rksTemplateRepository) { + this.rksTemplateRepository = rksTemplateRepository; + } + + @Override + public RksTemplateResponse execute(RksTemplateRequest input) { + + var rksTemplateOptional= rksTemplateRepository.findByKodeTemplateAndIsDeleteFalse(input.getKodeTemplate()); + if (rksTemplateOptional.isPresent()) { + throw new BusinessException(Constants.ERR_CODE_10002, + Constants.ERR_TTL_10002, + String.format(Constants.ERR_MSG_10002, "RKS Kode Template", input.getKodeTemplate())); + } + + RksTemplate rksTemplate = RksTemplate.builder() + .kodeTemplate(input.getKodeTemplate()) + .namaTemplate(input.getNamaTemplate()) + .metodePengadaanId(input.getMetodePengadaanId()) + .rksDaftarIsiId(input.getRksDaftarIsiId()) + .versi(input.getVersi()) + .isActive(BooleanUtils.isTrue(input.getIsActive())) + .isDelete(false) + .build(); + + var result = rksTemplateRepository.save(rksTemplate); + + return RksTemplateResponse.builder() + .id(result.getId()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/rkstemplate/PutUpdateRksTemplateService.java b/src/main/java/com/iconplus/smartproc/service/rkstemplate/PutUpdateRksTemplateService.java new file mode 100644 index 0000000..99e9c8c --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/rkstemplate/PutUpdateRksTemplateService.java @@ -0,0 +1,42 @@ +package com.iconplus.smartproc.service.rkstemplate; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.RksTemplateRequest; +import com.iconplus.smartproc.model.response.RksTemplateResponse; +import com.iconplus.smartproc.repository.RksTemplateRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.stereotype.Service; + +@Service +public class PutUpdateRksTemplateService implements BaseService { + + private final RksTemplateRepository rksTemplateRepository; + public PutUpdateRksTemplateService(RksTemplateRepository rksTemplateRepository) { + this.rksTemplateRepository = rksTemplateRepository; + } + + @Override + public RksTemplateResponse execute(RksTemplateRequest input) { + + var rksTemplate = rksTemplateRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(()-> new BusinessException( + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "RKS Template", input.getId()) + )); + + rksTemplate.setKodeTemplate(rksTemplate.getKodeTemplate()); + rksTemplate.setNamaTemplate(rksTemplate.getNamaTemplate()); + rksTemplate.setRksDaftarIsiId(rksTemplate.getRksDaftarIsiId()); + rksTemplate.setMetodePengadaanId(rksTemplate.getMetodePengadaanId()); + rksTemplate.setVersi(rksTemplate.getVersi()); + rksTemplate.setIsActive(rksTemplate.getIsActive()); + + rksTemplateRepository.save(rksTemplate); + + return RksTemplateResponse.builder() + .id(rksTemplate.getId()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/roles/DeleteRoleService.java b/src/main/java/com/iconplus/smartproc/service/roles/DeleteRoleService.java new file mode 100644 index 0000000..f5a4c17 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/roles/DeleteRoleService.java @@ -0,0 +1,33 @@ +package com.iconplus.smartproc.service.roles; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.Roles; +import com.iconplus.smartproc.model.request.RolesRequest; +import com.iconplus.smartproc.repository.RolesRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.stereotype.Service; + +@Service +public class DeleteRoleService implements BaseService { + + private RolesRepository rolesRepository; + public DeleteRoleService(RolesRepository rolesRepository) { + this.rolesRepository = rolesRepository; + } + + @Override + public EmptyResponse execute(RolesRequest input) { + + Roles role = rolesRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(Constants.ERR_CODE_10005, + Constants.ERR_TTL_10005, + String.format(Constants.ERR_MSG_10005, input.getId()))); + + role.setIsDelete(true); + rolesRepository.save(role); + + return new EmptyResponse(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/roles/GetRoleByIdService.java b/src/main/java/com/iconplus/smartproc/service/roles/GetRoleByIdService.java new file mode 100644 index 0000000..67182b6 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/roles/GetRoleByIdService.java @@ -0,0 +1,61 @@ +package com.iconplus.smartproc.service.roles; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.Roles; +import com.iconplus.smartproc.model.projection.PermissionView; +import com.iconplus.smartproc.model.request.RolesRequest; +import com.iconplus.smartproc.model.response.PermissionResponse; +import com.iconplus.smartproc.model.response.RolesResponse; +import com.iconplus.smartproc.repository.PermissionRepository; +import com.iconplus.smartproc.repository.RolesRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class GetRoleByIdService implements BaseService { + + private final RolesRepository rolesRepository; + private PermissionRepository permissionRepository; + public GetRoleByIdService(RolesRepository rolesRepository, + PermissionRepository permissionRepository) { + this.rolesRepository = rolesRepository; + this.permissionRepository = permissionRepository; + } + + @Override + public RolesResponse execute(RolesRequest input) { + + Roles role = rolesRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(Constants.ERR_CODE_10005, + Constants.ERR_TTL_10005, + String.format(Constants.ERR_MSG_10005, input.getId()))); + + List permissionResponses = new ArrayList<>(); + List permissionViews = permissionRepository.getAllPermissionsByRoleId(role.getId()); + for (PermissionView permissionView : permissionViews) { + permissionResponses.add(PermissionResponse.builder() + .parentId(permissionView.getParentId()) + .menuId(permissionView.getMenuId()) + .menu(permissionView.getNama()) + .canView(permissionView.getCanView()) + .canCreate(permissionView.getCanCreate()) + .canRead(permissionView.getCanRead()) + .canUpdate(permissionView.getCanUpdate()) + .canDelete(permissionView.getCanDelete()) + .build()); + } + + return RolesResponse.builder() + .id(role.getId()) + .role(role.getRole()) + .keterangan(role.getKeterangan()) + .isActive(role.getIsActive()) + .isDelete(role.getIsDelete()) + .permission(permissionResponses) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/roles/GetRolesService.java b/src/main/java/com/iconplus/smartproc/service/roles/GetRolesService.java new file mode 100644 index 0000000..d2399b4 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/roles/GetRolesService.java @@ -0,0 +1,60 @@ +package com.iconplus.smartproc.service.roles; + +import com.iconplus.smartproc.helper.model.Pagination; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.projection.RolesView; +import com.iconplus.smartproc.model.request.RolesRequest; +import com.iconplus.smartproc.model.response.GetRolesResponse; +import com.iconplus.smartproc.model.response.RolesResponse; +import com.iconplus.smartproc.repository.RolesRepository; +import org.apache.commons.lang3.StringUtils; +import org.springframework.data.domain.Page; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class GetRolesService implements BaseService { + + private final RolesRepository rolesRepository; + public GetRolesService(RolesRepository rolesRepository) { + this.rolesRepository = rolesRepository; + } + + @Override + public GetRolesResponse execute(RolesRequest input) { + validateRequest(input); + List rolesResponseList = new ArrayList<>(); + Page rolesViews = rolesRepository.findAllRolesANdDeletedFalse(input.getSearch(), input.getPageable()); + + for (RolesView rolesView : rolesViews) { + RolesResponse rolesResponse = RolesResponse.builder() + .id(rolesView.getId()) + .role(rolesView.getRole()) + .keterangan(rolesView.getKeterangan()) + .isActive(rolesView.getIsActive()) + .isDelete(rolesView.getIsDelete()) + .build(); + rolesResponseList.add(rolesResponse); + } + + return GetRolesResponse.builder() + .data(rolesResponseList) + .pagination(Pagination.builder() + .pageSize(input.getPageable().getPageSize()) + .currentPage(input.getPageable().getPageNumber()) + .totalPages(rolesViews.getTotalPages()) + .totalRecords(rolesViews.getTotalElements()) + .isFirstPage(rolesViews.isFirst()) + .isLastPage(rolesViews.isLast()) + .build()) + .build(); + } + + private void validateRequest(RolesRequest input) { + if (StringUtils.isNotBlank(input.getSearch())) { + input.setSearch('%'+ input.getSearch().toUpperCase()+'%'); + } + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/roles/PostCreateRoleService.java b/src/main/java/com/iconplus/smartproc/service/roles/PostCreateRoleService.java new file mode 100644 index 0000000..0cede0b --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/roles/PostCreateRoleService.java @@ -0,0 +1,77 @@ +package com.iconplus.smartproc.service.roles; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.Menus; +import com.iconplus.smartproc.model.entity.Permission; +import com.iconplus.smartproc.model.entity.Roles; +import com.iconplus.smartproc.model.request.RolesRequest; +import com.iconplus.smartproc.model.response.RolesResponse; +import com.iconplus.smartproc.repository.MenusRepository; +import com.iconplus.smartproc.repository.PermissionRepository; +import com.iconplus.smartproc.repository.RolesRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.stereotype.Service; + +import javax.transaction.Transactional; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +@Service +public class PostCreateRoleService implements BaseService { + + private final MenusRepository menusRepository; + private final RolesRepository rolesRepository; + private final PermissionRepository permissionRepository; + public PostCreateRoleService(RolesRepository rolesRepository, + MenusRepository menusRepository, + PermissionRepository permissionRepository) { + this.rolesRepository = rolesRepository; + this.menusRepository = menusRepository; + this.permissionRepository = permissionRepository; + } + + @Transactional + @Override + public RolesResponse execute(RolesRequest input) { + + Optional role = rolesRepository.findByRoleAndIsDeleteFalse(input.getRole()); + if (role.isPresent()) { + throw new BusinessException(Constants.ERR_CODE_10006, + Constants.ERR_TTL_10006, + String.format(Constants.ERR_MSG_10006, input.getRole())); + } + + Roles roles = Roles.builder() + .role(input.getRole()) + .keterangan(input.getKeterangan()) + .isActive(input.getIsActive()) + .isDelete(false) + .build(); + var result = rolesRepository.save(roles); + + List menusList = menusRepository.findAllMenus(); + + List permissions = new ArrayList<>(); + for (Menus menus : menusList) { + permissions.add(Permission.builder() + .roleId(result.getId()) + .menuId(menus.getId()) + .canRead(false) + .canCreate(false) + .canView(false) + .canUpdate(false) + .canDelete(false) + .canDelete(false) + .isDelete(false) + .build()); + } + + permissionRepository.saveAll(permissions); + + return RolesResponse.builder() + .id(result.getId()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/roles/PutUpdateRoleService.java b/src/main/java/com/iconplus/smartproc/service/roles/PutUpdateRoleService.java new file mode 100644 index 0000000..e48aa65 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/roles/PutUpdateRoleService.java @@ -0,0 +1,38 @@ +package com.iconplus.smartproc.service.roles; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.Roles; +import com.iconplus.smartproc.model.request.RolesRequest; +import com.iconplus.smartproc.model.response.RolesResponse; +import com.iconplus.smartproc.repository.RolesRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.stereotype.Service; + +@Service +public class PutUpdateRoleService implements BaseService { + + private final RolesRepository rolesRepository; + public PutUpdateRoleService(RolesRepository rolesRepository) { + this.rolesRepository = rolesRepository; + } + + @Override + public RolesResponse execute(RolesRequest input) { + + Roles role = rolesRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(Constants.ERR_CODE_10005, + Constants.ERR_TTL_10005, + String.format(Constants.ERR_MSG_10005, input.getId()))); + + role.setRole(input.getRole()); + role.setKeterangan(input.getKeterangan()); + role.setIsActive(input.getIsActive()); + rolesRepository.save(role); + + return RolesResponse.builder() + .id(role.getId()) + .build(); + } +} + diff --git a/src/main/java/com/iconplus/smartproc/service/strategipengadaan/DeleteStrategiPengadaanService.java b/src/main/java/com/iconplus/smartproc/service/strategipengadaan/DeleteStrategiPengadaanService.java new file mode 100644 index 0000000..d3ecff0 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/strategipengadaan/DeleteStrategiPengadaanService.java @@ -0,0 +1,38 @@ +package com.iconplus.smartproc.service.strategipengadaan; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.StrategiPengadaanRequest; +import com.iconplus.smartproc.repository.StrategiPengadaanRepository; +import com.iconplus.smartproc.util.Constants; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +@Service +@Slf4j +public class DeleteStrategiPengadaanService implements BaseService { + + private StrategiPengadaanRepository strategiPengadaanRepository; + + public DeleteStrategiPengadaanService(StrategiPengadaanRepository strategiPengadaanRepository) { + this.strategiPengadaanRepository = strategiPengadaanRepository; + } + + + @Override + public EmptyResponse execute(StrategiPengadaanRequest input) { + + var strategiPengadaan = strategiPengadaanRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "Strategi Pengadaan", input.getId()))); + + strategiPengadaan.setIsDelete(true); + strategiPengadaanRepository.save(strategiPengadaan); + log.info("success delete strategi pengadaan id {}", strategiPengadaan.getIsDelete()); + return new EmptyResponse(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/strategipengadaan/GetListStrategiPengadaanService.java b/src/main/java/com/iconplus/smartproc/service/strategipengadaan/GetListStrategiPengadaanService.java new file mode 100644 index 0000000..c118610 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/strategipengadaan/GetListStrategiPengadaanService.java @@ -0,0 +1,61 @@ +package com.iconplus.smartproc.service.strategipengadaan; + +import com.iconplus.smartproc.helper.model.Pagination; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.projection.StrategiPengadaanView; +import com.iconplus.smartproc.model.request.StrategiPengadaanRequest; +import com.iconplus.smartproc.model.response.GetListStrategiPengadaanResponse; +import com.iconplus.smartproc.model.response.StrategiPengadaanResponse; +import com.iconplus.smartproc.repository.StrategiPengadaanRepository; +import org.apache.commons.lang3.StringUtils; +import org.springframework.data.domain.Page; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class GetListStrategiPengadaanService implements BaseService { + + private StrategiPengadaanRepository strategiPengadaanRepository; + + public GetListStrategiPengadaanService(StrategiPengadaanRepository strategiPengadaanRepository) { + this.strategiPengadaanRepository = strategiPengadaanRepository; + } + + @Override + public GetListStrategiPengadaanResponse execute(StrategiPengadaanRequest input) { + validateRequest(input); + List strategiPengadaanResponseList = new ArrayList<>(); + Page strategiPengadaanViews = strategiPengadaanRepository.getAllStrategiPengadaan(input.getSearch(), input.getPageable()); + + for (StrategiPengadaanView strategiPengadaanView : strategiPengadaanViews) { + StrategiPengadaanResponse strategiPengadaanResponse = StrategiPengadaanResponse.builder() + .id(strategiPengadaanView.getId()) + .strategiPengadaan(strategiPengadaanView.getStrategiPengadaan()) + .keterangan(strategiPengadaanView.getKeterangan()) + .isActive(strategiPengadaanView.getIsActive()) + .isDelete(strategiPengadaanView.getIsDelete()) + .build(); + strategiPengadaanResponseList.add(strategiPengadaanResponse); + } + + return GetListStrategiPengadaanResponse.builder() + .data(strategiPengadaanResponseList) + .pagination(Pagination.builder() + .pageSize(input.getPageable().getPageSize()) + .currentPage(input.getPageable().getPageNumber()) + .totalPages(strategiPengadaanViews.getTotalPages()) + .totalRecords(strategiPengadaanViews.getTotalElements()) + .isFirstPage(strategiPengadaanViews.isFirst()) + .isLastPage(strategiPengadaanViews.isLast()) + .build()) + .build(); + } + + private void validateRequest(StrategiPengadaanRequest input) { + if (StringUtils.isNotBlank(input.getSearch())) { + input.setSearch('%'+ input.getSearch().toUpperCase()+'%'); + } + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/strategipengadaan/GetStrategiPengadaanByIdService.java b/src/main/java/com/iconplus/smartproc/service/strategipengadaan/GetStrategiPengadaanByIdService.java new file mode 100644 index 0000000..ad5401b --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/strategipengadaan/GetStrategiPengadaanByIdService.java @@ -0,0 +1,39 @@ +package com.iconplus.smartproc.service.strategipengadaan; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.StrategiPengadaanRequest; +import com.iconplus.smartproc.model.response.StrategiPengadaanResponse; +import com.iconplus.smartproc.repository.StrategiPengadaanRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +@Service +public class GetStrategiPengadaanByIdService implements BaseService { + + private final StrategiPengadaanRepository strategiPengadaanRepository; + + public GetStrategiPengadaanByIdService(StrategiPengadaanRepository strategiPengadaanRepository) { + this.strategiPengadaanRepository = strategiPengadaanRepository; + } + + @Override + public StrategiPengadaanResponse execute(StrategiPengadaanRequest input) { + var strategiPengadaanView = strategiPengadaanRepository.findByIdAndIsDeleteFalse(input.getId()); + if (strategiPengadaanView.isEmpty()) { + throw new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "Strategi Pengadaan", input.getId())); + } + + return StrategiPengadaanResponse.builder() + .id(strategiPengadaanView.get().getId()) + .strategiPengadaan(strategiPengadaanView.get().getStrategiPengadaan()) + .keterangan(strategiPengadaanView.get().getKeterangan()) + .isActive(strategiPengadaanView.get().getIsActive()) + .isDelete(strategiPengadaanView.get().getIsDelete()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/strategipengadaan/PostCreateStrategiPengadaanService.java b/src/main/java/com/iconplus/smartproc/service/strategipengadaan/PostCreateStrategiPengadaanService.java new file mode 100644 index 0000000..9eec5de --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/strategipengadaan/PostCreateStrategiPengadaanService.java @@ -0,0 +1,49 @@ +package com.iconplus.smartproc.service.strategipengadaan; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.StrategiPengadaan; +import com.iconplus.smartproc.model.request.StrategiPengadaanRequest; +import com.iconplus.smartproc.model.response.StrategiPengadaanResponse; +import com.iconplus.smartproc.repository.StrategiPengadaanRepository; +import com.iconplus.smartproc.util.Constants; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +@Service +@Slf4j +public class PostCreateStrategiPengadaanService implements BaseService { + + private final StrategiPengadaanRepository strategiPengadaanRepository; + + public PostCreateStrategiPengadaanService(StrategiPengadaanRepository strategiPengadaanRepository) { + this.strategiPengadaanRepository = strategiPengadaanRepository; + } + + @Override + public StrategiPengadaanResponse execute(StrategiPengadaanRequest input) { + + var existStrategiPengadaan = strategiPengadaanRepository.findByStrategiPengadaanAndIsDeleteFalse(input.getStrategiPengadaan()); + if (existStrategiPengadaan.isPresent()) { + throw new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10002, + Constants.ERR_TTL_10002, + String.format(Constants.ERR_MSG_10002, "Strategi Pengadaan", input.getStrategiPengadaan())); + } + + StrategiPengadaan strategiPengadaan = StrategiPengadaan.builder() + .strategiPengadaan(input.getStrategiPengadaan()) + .keterangan(input.getKeterangan()) + .isActive(input.getIsActive()) + .isDelete(false) + .build(); + + var result = strategiPengadaanRepository.save(strategiPengadaan); + log.info("success insert strategi pengadaan id : {}", result.getId()); + return StrategiPengadaanResponse.builder() + .id(result.getId()) + .build(); + + } +} \ No newline at end of file diff --git a/src/main/java/com/iconplus/smartproc/service/strategipengadaan/PutUpdateStrategiPengadaanService.java b/src/main/java/com/iconplus/smartproc/service/strategipengadaan/PutUpdateStrategiPengadaanService.java new file mode 100644 index 0000000..bd8b080 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/strategipengadaan/PutUpdateStrategiPengadaanService.java @@ -0,0 +1,41 @@ +package com.iconplus.smartproc.service.strategipengadaan; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.StrategiPengadaanRequest; +import com.iconplus.smartproc.model.response.StrategiPengadaanResponse; +import com.iconplus.smartproc.repository.StrategiPengadaanRepository; +import com.iconplus.smartproc.util.Constants; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +@Service +@Slf4j +public class PutUpdateStrategiPengadaanService implements BaseService { + + private StrategiPengadaanRepository strategiPengadaanRepository; + + public PutUpdateStrategiPengadaanService(StrategiPengadaanRepository strategiPengadaanRepository) { + this.strategiPengadaanRepository = strategiPengadaanRepository; + } + + @Override + public StrategiPengadaanResponse execute(StrategiPengadaanRequest input) { + + var strategiPengadaan = strategiPengadaanRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "Strategi Pengadaan", input.getId()))); + + strategiPengadaan.setStrategiPengadaan(input.getStrategiPengadaan()); + strategiPengadaan.setKeterangan(input.getKeterangan()); + strategiPengadaan.setIsActive(input.getIsActive()); + strategiPengadaanRepository.save(strategiPengadaan); + log.info("Success edit strategi pengadaan id {}", strategiPengadaan.getId()); + return StrategiPengadaanResponse.builder() + .id(strategiPengadaan.getId()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/sumberdana/DeleteSumberDanaService.java b/src/main/java/com/iconplus/smartproc/service/sumberdana/DeleteSumberDanaService.java new file mode 100644 index 0000000..32f23a2 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/sumberdana/DeleteSumberDanaService.java @@ -0,0 +1,32 @@ +package com.iconplus.smartproc.service.sumberdana; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.SumberDanaRequest; +import com.iconplus.smartproc.repository.SumberDanaRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +@Service +public class DeleteSumberDanaService implements BaseService { + + private SumberDanaRepository sumberDanaRepository; + + public DeleteSumberDanaService(SumberDanaRepository sumberDanaRepository) { + this.sumberDanaRepository = sumberDanaRepository; + } + + @Override + public EmptyResponse execute(SumberDanaRequest input) { + var sumberDana = sumberDanaRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "Sumber Dana", input.getId()))); + sumberDana.setIsDelete(true); + sumberDanaRepository.save(sumberDana); + return new EmptyResponse(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/sumberdana/GetListSumberDanaService.java b/src/main/java/com/iconplus/smartproc/service/sumberdana/GetListSumberDanaService.java new file mode 100644 index 0000000..d920456 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/sumberdana/GetListSumberDanaService.java @@ -0,0 +1,57 @@ +package com.iconplus.smartproc.service.sumberdana; + +import com.iconplus.smartproc.helper.model.Pagination; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.projection.SumberDanaView; +import com.iconplus.smartproc.model.request.SumberDanaRequest; +import com.iconplus.smartproc.model.response.GetListSumberDanaResponse; +import com.iconplus.smartproc.model.response.SumberDanaResponse; +import com.iconplus.smartproc.repository.SumberDanaRepository; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class GetListSumberDanaService implements BaseService { + + private SumberDanaRepository sumberDanaRepository; + + public GetListSumberDanaService(SumberDanaRepository sumberDanaRepository) { + this.sumberDanaRepository = sumberDanaRepository; + } + + @Override + public GetListSumberDanaResponse execute(SumberDanaRequest input) { + validateRequest(input); + List sumberDanaResponseList = new ArrayList<>(); + var sumberDanaViews= sumberDanaRepository.getListSumberDana(input.getSearch(), input.getPageable()); + for (SumberDanaView sumberDanaView : sumberDanaViews) { + SumberDanaResponse sumberDanaResponse = SumberDanaResponse.builder() + .id(sumberDanaView.getId()) + .sumberDana(sumberDanaView.getSumberDana()) + .keterangan(sumberDanaView.getKeterangan()) + .isActive(sumberDanaView.getIsActive()) + .build(); + sumberDanaResponseList.add(sumberDanaResponse); + } + return GetListSumberDanaResponse.builder() + .data(sumberDanaResponseList) + .pagination(Pagination.builder() + .pageSize(input.getPageable().getPageSize()) + .currentPage(input.getPageable().getPageNumber()) + .totalPages(sumberDanaViews.getTotalPages()) + .totalRecords(sumberDanaViews.getTotalElements()) + .isFirstPage(sumberDanaViews.isFirst()) + .isLastPage(sumberDanaViews.isLast()) + .build()) + .build(); + } + + private void validateRequest(SumberDanaRequest input) { + if (StringUtils.isNotBlank(input.getSearch())) { + input.setSearch('%'+ input.getSearch().toUpperCase()+'%'); + } + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/sumberdana/GetSumberDanaService.java b/src/main/java/com/iconplus/smartproc/service/sumberdana/GetSumberDanaService.java new file mode 100644 index 0000000..b7d6fde --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/sumberdana/GetSumberDanaService.java @@ -0,0 +1,37 @@ +package com.iconplus.smartproc.service.sumberdana; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.SumberDanaRequest; +import com.iconplus.smartproc.model.response.SumberDanaResponse; +import com.iconplus.smartproc.repository.SumberDanaRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +@Service +public class GetSumberDanaService implements BaseService { + + private SumberDanaRepository sumberDanaRepository; + + public GetSumberDanaService(SumberDanaRepository sumberDanaRepository) { + this.sumberDanaRepository = sumberDanaRepository; + } + + @Override + public SumberDanaResponse execute(SumberDanaRequest input) { + + var sumberDana = sumberDanaRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "Sumber Dana", input.getId()))); + return SumberDanaResponse.builder() + .id(sumberDana.getId()) + .sumberDana(sumberDana.getSumberDana()) + .keterangan(sumberDana.getKeterangan()) + .isActive(sumberDana.getIsActive()) + .isDelete(sumberDana.getIsDelete()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/sumberdana/PostCreateSumberDanaService.java b/src/main/java/com/iconplus/smartproc/service/sumberdana/PostCreateSumberDanaService.java new file mode 100644 index 0000000..b6dccb0 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/sumberdana/PostCreateSumberDanaService.java @@ -0,0 +1,45 @@ +package com.iconplus.smartproc.service.sumberdana; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.SumberDana; +import com.iconplus.smartproc.model.request.SumberDanaRequest; +import com.iconplus.smartproc.model.response.SumberDanaResponse; +import com.iconplus.smartproc.repository.SumberDanaRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +@Service +public class PostCreateSumberDanaService implements BaseService { + + private SumberDanaRepository sumberDanaRepository; + + public PostCreateSumberDanaService(SumberDanaRepository sumberDanaRepository) { + this.sumberDanaRepository = sumberDanaRepository; + } + + @Override + public SumberDanaResponse execute(SumberDanaRequest input) { + + var sumberDana = sumberDanaRepository.findBySumberDanaAndIsDeleteFalse(input.getSumberDana()); + if (sumberDana.isPresent()) { + throw new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10002, + Constants.ERR_TTL_10002, + String.format(Constants.ERR_MSG_10002, "Sumber Dana", input.getSumberDana())); + } + SumberDana sumberDanaEntity = SumberDana.builder() + .sumberDana(input.getSumberDana()) + .keterangan(input.getKeterangan()) + .isActive(input.getIsActive()) + .isDelete(false) + .build(); + + var result = sumberDanaRepository.save(sumberDanaEntity); + + return SumberDanaResponse.builder() + .id(result.getId()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/sumberdana/PutSumberDanaService.java b/src/main/java/com/iconplus/smartproc/service/sumberdana/PutSumberDanaService.java new file mode 100644 index 0000000..9b2d354 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/sumberdana/PutSumberDanaService.java @@ -0,0 +1,38 @@ +package com.iconplus.smartproc.service.sumberdana; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.SumberDanaRequest; +import com.iconplus.smartproc.model.response.SumberDanaResponse; +import com.iconplus.smartproc.repository.SumberDanaRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +@Service +public class PutSumberDanaService implements BaseService { + + private SumberDanaRepository sumberDanaRepository; + + public PutSumberDanaService(SumberDanaRepository sumberDanaRepository) { + this.sumberDanaRepository = sumberDanaRepository; + } + + @Override + public SumberDanaResponse execute(SumberDanaRequest input) { + + var sumberDana = sumberDanaRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "Sumber Dana", input.getId()))); + sumberDana.setSumberDana(input.getSumberDana()); + sumberDana.setKeterangan(input.getKeterangan()); + sumberDana.setIsActive(input.getIsActive()); + var result = sumberDanaRepository.save(sumberDana); + return SumberDanaResponse.builder() + .id(result.getId()) + .build(); + + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/supplypositioningmatrix/DeleteSupplyPositioningMatrixService.java b/src/main/java/com/iconplus/smartproc/service/supplypositioningmatrix/DeleteSupplyPositioningMatrixService.java new file mode 100644 index 0000000..d6fc391 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/supplypositioningmatrix/DeleteSupplyPositioningMatrixService.java @@ -0,0 +1,38 @@ +package com.iconplus.smartproc.service.supplypositioningmatrix; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.SupplyPositioningMatrixRequest; +import com.iconplus.smartproc.repository.SupplyPositioningMatrixRepository; +import com.iconplus.smartproc.util.Constants; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +@Service +@Slf4j +public class DeleteSupplyPositioningMatrixService implements BaseService { + + private SupplyPositioningMatrixRepository supplyPositioningMatrixRepository; + + public DeleteSupplyPositioningMatrixService(SupplyPositioningMatrixRepository supplyPositioningMatrixRepository) { + this.supplyPositioningMatrixRepository = supplyPositioningMatrixRepository; + } + + + @Override + public EmptyResponse execute(SupplyPositioningMatrixRequest input) { + + var supplyPositioningMatrix = supplyPositioningMatrixRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "Supply Posotioning Matrix", input.getId()))); + + supplyPositioningMatrix.setIsDelete(true); + supplyPositioningMatrixRepository.save(supplyPositioningMatrix); + log.info("success delete supply positioning matrix id {}", supplyPositioningMatrix.getIsDelete()); + return new EmptyResponse(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/supplypositioningmatrix/GetListSupplyPositioningMatrixService.java b/src/main/java/com/iconplus/smartproc/service/supplypositioningmatrix/GetListSupplyPositioningMatrixService.java new file mode 100644 index 0000000..af75ca4 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/supplypositioningmatrix/GetListSupplyPositioningMatrixService.java @@ -0,0 +1,61 @@ +package com.iconplus.smartproc.service.supplypositioningmatrix; + +import com.iconplus.smartproc.helper.model.Pagination; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.projection.SupplyPositioningMatrixView; +import com.iconplus.smartproc.model.request.SupplyPositioningMatrixRequest; +import com.iconplus.smartproc.model.response.GetListSupplyPositioningMatrixResponse; +import com.iconplus.smartproc.model.response.SupplyPositioningMatrixResponse; +import com.iconplus.smartproc.repository.SupplyPositioningMatrixRepository; +import org.apache.commons.lang3.StringUtils; +import org.springframework.data.domain.Page; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class GetListSupplyPositioningMatrixService implements BaseService { + + private SupplyPositioningMatrixRepository supplyPositioningMatrixRepository; + + public GetListSupplyPositioningMatrixService(SupplyPositioningMatrixRepository supplyPositioningMatrixRepository) { + this.supplyPositioningMatrixRepository = supplyPositioningMatrixRepository; + } + + @Override + public GetListSupplyPositioningMatrixResponse execute(SupplyPositioningMatrixRequest input) { + validateRequest(input); + List supplyPositioningMatrixResponseList = new ArrayList<>(); + Page supplyPositioningMatrixViews = supplyPositioningMatrixRepository.getAllSupplyPositioningMatrix(input.getSearch(), input.getPageable()); + + for (SupplyPositioningMatrixView supplyPositioningMatrixView : supplyPositioningMatrixViews) { + SupplyPositioningMatrixResponse supplyPositioningMatrixResponse = SupplyPositioningMatrixResponse.builder() + .id(supplyPositioningMatrixView.getId()) + .supplyPositioningMatrix(supplyPositioningMatrixView.getSupplyPositioningMatrix()) + .keterangan(supplyPositioningMatrixView.getKeterangan()) + .isActive(supplyPositioningMatrixView.getIsActive()) + .isDelete(supplyPositioningMatrixView.getIsDelete()) + .build(); + supplyPositioningMatrixResponseList.add(supplyPositioningMatrixResponse); + } + + return GetListSupplyPositioningMatrixResponse.builder() + .data(supplyPositioningMatrixResponseList) + .pagination(Pagination.builder() + .pageSize(input.getPageable().getPageSize()) + .currentPage(input.getPageable().getPageNumber()) + .totalPages(supplyPositioningMatrixViews.getTotalPages()) + .totalRecords(supplyPositioningMatrixViews.getTotalElements()) + .isFirstPage(supplyPositioningMatrixViews.isFirst()) + .isLastPage(supplyPositioningMatrixViews.isLast()) + .build()) + .build(); + } + + private void validateRequest(SupplyPositioningMatrixRequest input) { + if (StringUtils.isNotBlank(input.getSearch())) { + input.setSearch('%'+ input.getSearch().toUpperCase()+'%'); + } + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/supplypositioningmatrix/GetSupplyPositioningMatrixByIdService.java b/src/main/java/com/iconplus/smartproc/service/supplypositioningmatrix/GetSupplyPositioningMatrixByIdService.java new file mode 100644 index 0000000..722c23a --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/supplypositioningmatrix/GetSupplyPositioningMatrixByIdService.java @@ -0,0 +1,39 @@ +package com.iconplus.smartproc.service.supplypositioningmatrix; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.SupplyPositioningMatrixRequest; +import com.iconplus.smartproc.model.response.SupplyPositioningMatrixResponse; +import com.iconplus.smartproc.repository.SupplyPositioningMatrixRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +@Service +public class GetSupplyPositioningMatrixByIdService implements BaseService { + + private final SupplyPositioningMatrixRepository supplyPositioningMatrixRepository; + + public GetSupplyPositioningMatrixByIdService(SupplyPositioningMatrixRepository supplyPositioningMatrixRepository) { + this.supplyPositioningMatrixRepository = supplyPositioningMatrixRepository; + } + + @Override + public SupplyPositioningMatrixResponse execute(SupplyPositioningMatrixRequest input) { + var supplyPositioningMatrixView = supplyPositioningMatrixRepository.findByIdAndIsDeleteFalse(input.getId()); + if (supplyPositioningMatrixView.isEmpty()) { + throw new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "Supply Positioning Matrix", input.getId())); + } + + return SupplyPositioningMatrixResponse.builder() + .id(supplyPositioningMatrixView.get().getId()) + .supplyPositioningMatrix(supplyPositioningMatrixView.get().getSupplyPositioningMatrix()) + .keterangan(supplyPositioningMatrixView.get().getKeterangan()) + .isActive(supplyPositioningMatrixView.get().getIsActive()) + .isDelete(supplyPositioningMatrixView.get().getIsDelete()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/supplypositioningmatrix/PostCreateSupplyPositioningMatrixService.java b/src/main/java/com/iconplus/smartproc/service/supplypositioningmatrix/PostCreateSupplyPositioningMatrixService.java new file mode 100644 index 0000000..a3a14a7 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/supplypositioningmatrix/PostCreateSupplyPositioningMatrixService.java @@ -0,0 +1,49 @@ +package com.iconplus.smartproc.service.supplypositioningmatrix; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.SupplyPositioningMatrix; +import com.iconplus.smartproc.model.request.SupplyPositioningMatrixRequest; +import com.iconplus.smartproc.model.response.SupplyPositioningMatrixResponse; +import com.iconplus.smartproc.repository.SupplyPositioningMatrixRepository; +import com.iconplus.smartproc.util.Constants; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +@Service +@Slf4j +public class PostCreateSupplyPositioningMatrixService implements BaseService { + + private final SupplyPositioningMatrixRepository supplyPositioningMatrixRepository; + + public PostCreateSupplyPositioningMatrixService(SupplyPositioningMatrixRepository supplyPositioningMatrixRepository) { + this.supplyPositioningMatrixRepository = supplyPositioningMatrixRepository; + } + + @Override + public SupplyPositioningMatrixResponse execute(SupplyPositioningMatrixRequest input) { + + var existSupplyPositioningMatrix = supplyPositioningMatrixRepository.findBySupplyPositioningMatrixAndIsDeleteFalse(input.getSupplyPositioningMatrix()); + if (existSupplyPositioningMatrix.isPresent()) { + throw new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10002, + Constants.ERR_TTL_10002, + String.format(Constants.ERR_MSG_10002, "Supply Positioning Matrix", input.getSupplyPositioningMatrix())); + } + + SupplyPositioningMatrix supplyPositioningMatrix = SupplyPositioningMatrix.builder() + .supplyPositioningMatrix(input.getSupplyPositioningMatrix()) + .keterangan(input.getKeterangan()) + .isActive(input.getIsActive()) + .isDelete(false) + .build(); + + var result = supplyPositioningMatrixRepository.save(supplyPositioningMatrix); + log.info("success insert supply positioning matrix id : {}", result.getId()); + return SupplyPositioningMatrixResponse.builder() + .id(result.getId()) + .build(); + + } +} \ No newline at end of file diff --git a/src/main/java/com/iconplus/smartproc/service/supplypositioningmatrix/PutUpdateSupplyPositioningMatrixService.java b/src/main/java/com/iconplus/smartproc/service/supplypositioningmatrix/PutUpdateSupplyPositioningMatrixService.java new file mode 100644 index 0000000..f404e37 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/supplypositioningmatrix/PutUpdateSupplyPositioningMatrixService.java @@ -0,0 +1,41 @@ +package com.iconplus.smartproc.service.supplypositioningmatrix; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.SupplyPositioningMatrixRequest; +import com.iconplus.smartproc.model.response.SupplyPositioningMatrixResponse; +import com.iconplus.smartproc.repository.SupplyPositioningMatrixRepository; +import com.iconplus.smartproc.util.Constants; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +@Service +@Slf4j +public class PutUpdateSupplyPositioningMatrixService implements BaseService { + + private SupplyPositioningMatrixRepository supplyPositioningMatrixRepository; + + public PutUpdateSupplyPositioningMatrixService(SupplyPositioningMatrixRepository supplyPositioningMatrixRepository) { + this.supplyPositioningMatrixRepository = supplyPositioningMatrixRepository; + } + + @Override + public SupplyPositioningMatrixResponse execute(SupplyPositioningMatrixRequest input) { + + var supplyPositioningMatrix = supplyPositioningMatrixRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "Supply Positioning Matrix", input.getId()))); + + supplyPositioningMatrix.setSupplyPositioningMatrix(input.getSupplyPositioningMatrix()); + supplyPositioningMatrix.setKeterangan(input.getKeterangan()); + supplyPositioningMatrix.setIsActive(input.getIsActive()); + supplyPositioningMatrixRepository.save(supplyPositioningMatrix); + log.info("Success edit supply positioning matrix id {}", supplyPositioningMatrix.getId()); + return SupplyPositioningMatrixResponse.builder() + .id(supplyPositioningMatrix.getId()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/unitinisiator/DeleteUnitInisiatorService.java b/src/main/java/com/iconplus/smartproc/service/unitinisiator/DeleteUnitInisiatorService.java new file mode 100644 index 0000000..a82fe85 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/unitinisiator/DeleteUnitInisiatorService.java @@ -0,0 +1,33 @@ +package com.iconplus.smartproc.service.unitinisiator; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.model.EmptyResponse; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.UnitInisiatorRequest; +import com.iconplus.smartproc.repository.UnitInisiatorRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +@Service +public class DeleteUnitInisiatorService implements BaseService { + + private UnitInisiatorRepository unitInisiatorRepository; + + private DeleteUnitInisiatorService(UnitInisiatorRepository unitInisiatorRepository) { + this.unitInisiatorRepository = unitInisiatorRepository; + } + + @Override + public EmptyResponse execute(UnitInisiatorRequest input) { + + var unitInisiator = unitInisiatorRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "Unit Inisiator", input.getId()))); + unitInisiator.setIsDelete(true); + unitInisiatorRepository.save(unitInisiator); + return new EmptyResponse(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/unitinisiator/GetListUnitInisiatorService.java b/src/main/java/com/iconplus/smartproc/service/unitinisiator/GetListUnitInisiatorService.java new file mode 100644 index 0000000..5dde2dc --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/unitinisiator/GetListUnitInisiatorService.java @@ -0,0 +1,60 @@ +package com.iconplus.smartproc.service.unitinisiator; + +import com.iconplus.smartproc.helper.model.Pagination; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.projection.UnitInisiatorView; +import com.iconplus.smartproc.model.request.UnitInisiatorRequest; +import com.iconplus.smartproc.model.response.GetListUnitInisiatorResponse; +import com.iconplus.smartproc.model.response.UnitInisiatorResponse; +import com.iconplus.smartproc.repository.UnitInisiatorRepository; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class GetListUnitInisiatorService implements BaseService { + + private UnitInisiatorRepository unitInisiatorRepository; + + private GetListUnitInisiatorService(UnitInisiatorRepository unitInisiatorRepository) { + this.unitInisiatorRepository = unitInisiatorRepository; + } + + @Override + public GetListUnitInisiatorResponse execute(UnitInisiatorRequest input) { + validateRequest(input); + List unitInisiatorResponseList = new ArrayList<>(); + var unitInisiatorViews = unitInisiatorRepository.getListUnitInisiator(input.getSearch(), input.getPageable()); + + for (UnitInisiatorView unitInisiatorView : unitInisiatorViews) { + UnitInisiatorResponse unitInisiatorResponse = UnitInisiatorResponse.builder() + .id(unitInisiatorView.getId()) + .unitInisiator(unitInisiatorView.getUnitInisiator()) + .keterangan(unitInisiatorView.getKeterangan()) + .isActive(unitInisiatorView.getIsActive()) + .isDelete(unitInisiatorView.getIsDelete()) + .build(); + unitInisiatorResponseList.add(unitInisiatorResponse); + } + + return GetListUnitInisiatorResponse.builder() + .data(unitInisiatorResponseList) + .pagination(Pagination.builder() + .pageSize(input.getPageable().getPageSize()) + .currentPage(input.getPageable().getPageNumber()) + .totalPages(unitInisiatorViews.getTotalPages()) + .totalRecords(unitInisiatorViews.getTotalElements()) + .isFirstPage(unitInisiatorViews.isFirst()) + .isLastPage(unitInisiatorViews.isLast()) + .build()) + .build(); + } + + private void validateRequest(UnitInisiatorRequest input) { + if (StringUtils.isNotBlank(input.getSearch())) { + input.setSearch('%'+ input.getSearch().toUpperCase()+'%'); + } + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/unitinisiator/GetUnitInisiatorService.java b/src/main/java/com/iconplus/smartproc/service/unitinisiator/GetUnitInisiatorService.java new file mode 100644 index 0000000..33083a5 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/unitinisiator/GetUnitInisiatorService.java @@ -0,0 +1,38 @@ +package com.iconplus.smartproc.service.unitinisiator; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.UnitInisiatorRequest; +import com.iconplus.smartproc.model.response.UnitInisiatorResponse; +import com.iconplus.smartproc.repository.UnitInisiatorRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +@Service +public class GetUnitInisiatorService implements BaseService { + + private UnitInisiatorRepository unitInisiatorRepository; + + private GetUnitInisiatorService(UnitInisiatorRepository unitInisiatorRepository) { + this.unitInisiatorRepository = unitInisiatorRepository; + } + + @Override + public UnitInisiatorResponse execute(UnitInisiatorRequest input) { + + var unitInisiator = unitInisiatorRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "Unit Inisiator", input.getId()))); + return UnitInisiatorResponse.builder() + .id(unitInisiator.getId()) + .unitInisiator(unitInisiator.getUnitInisiator()) + .keterangan(unitInisiator.getKeterangan()) + .isActive(unitInisiator.getIsActive()) + .isDelete(unitInisiator.getIsDelete()) + .build(); + + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/unitinisiator/PostCreateUnitInisiatorService.java b/src/main/java/com/iconplus/smartproc/service/unitinisiator/PostCreateUnitInisiatorService.java new file mode 100644 index 0000000..9acc3b0 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/unitinisiator/PostCreateUnitInisiatorService.java @@ -0,0 +1,44 @@ +package com.iconplus.smartproc.service.unitinisiator; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.UnitInisiator; +import com.iconplus.smartproc.model.request.UnitInisiatorRequest; +import com.iconplus.smartproc.model.response.UnitInisiatorResponse; +import com.iconplus.smartproc.repository.UnitInisiatorRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +@Service +public class PostCreateUnitInisiatorService implements BaseService { + + private UnitInisiatorRepository unitInisiatorRepository; + private PostCreateUnitInisiatorService(UnitInisiatorRepository unitInisiatorRepository) { + this.unitInisiatorRepository = unitInisiatorRepository; + } + + @Override + public UnitInisiatorResponse execute(UnitInisiatorRequest input) { + + var unitInisiator = unitInisiatorRepository.findByUnitInisiatorAndIsDeleteFalse(input.getUnitInisiator()); + if (unitInisiator.isPresent()) { + throw new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10002, + Constants.ERR_TTL_10002, + String.format(Constants.ERR_MSG_10002, "Unit Inisiator", input.getUnitInisiator())); + } + + UnitInisiator unitInisiatorEntity = UnitInisiator.builder() + .unitInisiator(input.getUnitInisiator()) + .keterangan(input.getKeterangan()) + .isActive(input.getIsActive()) + .isDelete(false) + .build(); + var result = unitInisiatorRepository.save(unitInisiatorEntity); + + return UnitInisiatorResponse.builder() + .id(result.getId()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/unitinisiator/PutUpdateUnitInisiatorService.java b/src/main/java/com/iconplus/smartproc/service/unitinisiator/PutUpdateUnitInisiatorService.java new file mode 100644 index 0000000..9c6b1da --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/unitinisiator/PutUpdateUnitInisiatorService.java @@ -0,0 +1,38 @@ +package com.iconplus.smartproc.service.unitinisiator; + +import com.iconplus.smartproc.exception.BusinessException; +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.request.UnitInisiatorRequest; +import com.iconplus.smartproc.model.response.UnitInisiatorResponse; +import com.iconplus.smartproc.repository.UnitInisiatorRepository; +import com.iconplus.smartproc.util.Constants; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +@Service +public class PutUpdateUnitInisiatorService implements BaseService { + + private UnitInisiatorRepository unitInisiatorRepository; + + private PutUpdateUnitInisiatorService(UnitInisiatorRepository unitInisiatorRepository) { + this.unitInisiatorRepository = unitInisiatorRepository; + } + + @Override + public UnitInisiatorResponse execute(UnitInisiatorRequest input) { + + var unitInisiator = unitInisiatorRepository.findByIdAndIsDeleteFalse(input.getId()) + .orElseThrow(() -> new BusinessException(HttpStatus.CONFLICT, + Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "Unit Inisiator", input.getId()))); + unitInisiator.setUnitInisiator(input.getUnitInisiator()); + unitInisiator.setKeterangan(input.getKeterangan()); + unitInisiator.setIsActive(input.getIsActive()); + var result = unitInisiatorRepository.save(unitInisiator); + + return UnitInisiatorResponse.builder() + .id(result.getId()) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/util/CommonUtil.java b/src/main/java/com/iconplus/smartproc/util/CommonUtil.java new file mode 100644 index 0000000..617d5be --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/util/CommonUtil.java @@ -0,0 +1,25 @@ +package com.iconplus.smartproc.util; + +import com.iconplus.smartproc.exception.TechnicalException; + +import java.sql.Clob; +import java.sql.SQLException; + +public class CommonUtil { + private CommonUtil() { + } + + public static String clobToString(Clob input) { + try { + if (input != null) { + return input.getSubString(1, (int) input.length()); + } else { + return null; + } + } catch (SQLException exception) { + throw new TechnicalException(Constants.ERR_TTL_40041, + Constants.ERR_TTL_40041, + Constants.ERR_MSG_40041); + } + } +} diff --git a/src/main/java/com/iconplus/smartproc/util/Constants.java b/src/main/java/com/iconplus/smartproc/util/Constants.java new file mode 100644 index 0000000..8526165 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/util/Constants.java @@ -0,0 +1,92 @@ +package com.iconplus.smartproc.util; + +public class Constants { + private Constants() { + } + + public static final String ERR_CODE_10001 = "10001"; + public static final String ERR_TTL_10001 = "Data tidak ditemukan"; + public static final String ERR_MSG_10001 = "%s dengan id : %s tidak ditemukan"; + + public static final String ERR_CODE_10002 = "10002"; + public static final String ERR_TTL_10002 = "Data tersedia"; + public static final String ERR_MSG_10002 = "%s : %s sudah tersedia"; + + public static final String ERR_CODE_10003 = "10003"; + public static final String ERR_TTL_10003 = "Data tidak tersedia"; + public static final String ERR_MSG_10003 = "User dengan email : %s tidak ditemukan"; + + public static final String ERR_CODE_10004 = "10004"; + public static final String ERR_TTL_10004 = "Gagal Authentikasi User"; + public static final String ERR_MSG_10004 = "Silahkan Periksa kembali Email dan Password Anda"; + + public static final String ERR_CODE_10005 = "10005"; + public static final String ERR_TTL_10005 = "Data tidak tersedia"; + public static final String ERR_MSG_10005 = "Role dengan id : %s tidak ditemukan"; + + public static final String ERR_CODE_10006 = "10006"; + public static final String ERR_TTL_10006 = "Data tersedia"; + public static final String ERR_MSG_10006 = "Role : %s sudah tersedia"; + + public static final String ERR_CODE_10007 = "10007"; + public static final String ERR_TTL_10007 = "Proses Gagal"; + public static final String ERR_MSG_10007 = "Silahkan periksa kembali password baru yg anda input"; + + public static final String ERR_CODE_10008 = "10008"; + public static final String ERR_TTL_10008 = "Proses Gagal"; + public static final String ERR_MSG_10008 = "Gagal generate token"; + + public static final String ERR_CODE_10009 = "10009"; + public static final String ERR_TTL_10009 = "Proses Gagal"; + public static final String ERR_MSG_10009 = "Periksa kembali password sekrang anda"; + + public static final String ERR_CODE_10010 = "10010"; + public static final String ERR_TTL_10010 = "Data tersedia"; + public static final String ERR_MSG_10010 = "Maaf, Tahun DRP yang anda pilih sudah ada sebelumnya. silahkan pilih Tahun DRP lain untuk menambah DRP baru."; + + public static final String ERR_CODE_10011 = "10011"; + public static final String ERR_TTL_10011 = "Proses Gagal"; + public static final String ERR_MSG_10011 = "Gagal decrypt password, masukkan password yg ter-encrypt"; + + public static final String ERR_CODE_10012 = "10012"; + public static final String ERR_TTL_10012 = "Proses Gagal"; + public static final String ERR_MSG_10012 = "Pastikan directori penimpanan file tersedia : %s"; + + public static final String ERR_CODE_10013 = "10013"; + public static final String ERR_TTL_10013 = "Gagal Approve"; + public static final String ERR_MSG_10013 = "Silahkan menunggu appoval %s terlebih dahulu"; + + public static final String ERR_CODE_40041 = "40041"; + public static final String ERR_TTL_40041 = "Terjadi Gangguan"; + public static final String ERR_MSG_40041 = "Masalah Koneksi System"; + + public static final String ERR_CODE_40051 = "40051"; + public static final String ERR_CODE_80007 = "80007"; + public static final String TITLE_INVALID_NEXT_STEP = "Proses tidak dapat dilanjutkan"; + public static final String REFRESH_TOKEN_EXPIRED = "Refresh token expired"; + public static final String REFRESH_TOKEN_NOT_VALID = "Refresh token tidak valid"; + + public static final String ERR_CODE_40042 = "40042"; + public static final String ERR_TTL_40042 = "Terjadi gangguan"; + public static final String ERR_MSG_40042 = "Proses generate token gagal dengan response: null"; + + public static final String ERR_CODE_40038 = "40038"; + public static final String ERR_TITLE_40038 = "Data Sedang Tidak Tersedia"; + public static final String ERR_MESSAGE_40038 = "Data User Tidak Ditemukan."; + + public static final String ERR_CODE_80000 = "80000"; + public static final String N0_SUCH_ALGORITHM_EXCEPTION = "NoSuchAlgorithmException : "; + public static final String N0_SUCH_PADDING_EXCEPTION = "NoSuchPaddingException : "; + public static final String INVALID_KEY_EXCEPTION = "InvalidKeyException : "; + public static final String ILEGAL_BLOCK_SIZE_EXCEPTION = "IllegalBlockSizeException : "; + public static final String BAD_PADDING_EXCEPTION = "BadPaddingException : "; + public static final String JABATAN_VP = "%VP%"; + public static final String JABATAN_DIREKTUR_KOMITE = "%DIR%"; + + public static final String STATUS_PENYUSUNAN = "Penyusunan"; + public static final String STATUS_APPROVAL_VP = "Approval VP"; + public static final String STATUS_REKOMENDASI_KOMITE = "Rekomendasi Komite"; + public static final String STATUS_APPROVAL_DIRUT = "Approval DIRUT"; + public static final String STATUS_APPROVED = "Approved"; + public static final String STATUS_REVISI_DRP = "Revisi DRP"; +} diff --git a/src/main/java/com/iconplus/smartproc/util/EncryptDecryptUtils.java b/src/main/java/com/iconplus/smartproc/util/EncryptDecryptUtils.java new file mode 100644 index 0000000..182e137 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/util/EncryptDecryptUtils.java @@ -0,0 +1,52 @@ +package com.iconplus.smartproc.util; + +import com.iconplus.smartproc.exception.TechnicalException; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import javax.crypto.BadPaddingException; +import javax.crypto.Cipher; +import javax.crypto.IllegalBlockSizeException; +import javax.crypto.NoSuchPaddingException; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; +import java.security.PrivateKey; +import java.util.Base64; + +public class EncryptDecryptUtils { + + private static final Logger log = LogManager.getLogger(EncryptDecryptUtils.class); + + private EncryptDecryptUtils() { + } + + public static String decrypt(String data, String base64PrivateKey) { + return decryptChipper(Base64.getDecoder().decode(data.getBytes()), RSAUtil.getPrivateKey(base64PrivateKey)); + } + + private static String decryptChipper(byte[] data, PrivateKey privateKey) { + var result = ""; + try { + var cipher = Cipher.getInstance("RSA/ECB/OAEPWithSHA-256AndMGF1Padding"); + cipher.init(2, privateKey); + result = new String(cipher.doFinal(data)); + } catch (NoSuchAlgorithmException var3) { + log.error("NoSuchAlgorithmException : {}", var3.getMessage()); + throw new TechnicalException(Constants.ERR_CODE_80000, Constants.N0_SUCH_ALGORITHM_EXCEPTION + var3.getMessage()); + } catch (NoSuchPaddingException var4) { + log.error("NoSuchPaddingException : {}", var4.getMessage()); + throw new TechnicalException(Constants.ERR_CODE_80000, Constants.N0_SUCH_PADDING_EXCEPTION + var4.getMessage()); + } catch (InvalidKeyException var5) { + log.error("InvalidKeyException : {}", var5.getMessage()); + throw new TechnicalException(Constants.ERR_CODE_80000, Constants.INVALID_KEY_EXCEPTION + var5.getMessage()); + } catch (IllegalBlockSizeException var6) { + log.error("IllegalBlockSizeException : {}", var6.getMessage()); + throw new TechnicalException(Constants.ERR_CODE_80000, Constants.ILEGAL_BLOCK_SIZE_EXCEPTION + var6.getMessage()); + } catch (BadPaddingException var7) { + log.error("BadPaddingException : {}", var7.getMessage()); + throw new TechnicalException(Constants.ERR_CODE_80000, Constants.BAD_PADDING_EXCEPTION + var7.getMessage()); + } + return result; + } + +} diff --git a/src/main/java/com/iconplus/smartproc/util/RSAUtil.java b/src/main/java/com/iconplus/smartproc/util/RSAUtil.java new file mode 100644 index 0000000..7d182e2 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/util/RSAUtil.java @@ -0,0 +1,109 @@ +package com.iconplus.smartproc.util; + +import com.iconplus.smartproc.exception.TechnicalException; +import lombok.extern.log4j.Log4j2; + +import javax.crypto.BadPaddingException; +import javax.crypto.Cipher; +import javax.crypto.IllegalBlockSizeException; +import javax.crypto.NoSuchPaddingException; +import java.security.*; +import java.security.spec.InvalidKeySpecException; +import java.security.spec.PKCS8EncodedKeySpec; +import java.security.spec.X509EncodedKeySpec; +import java.util.Base64; + +@Log4j2 +public class RSAUtil { + + private RSAUtil(){ + + } + + public static PrivateKey getPrivateKey(String base64PrivateKey){ + PrivateKey privateKey = null; + PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(Base64.getDecoder().decode(base64PrivateKey.getBytes())); + try { + KeyFactory keyFactory = KeyFactory.getInstance("RSA"); + privateKey = keyFactory.generatePrivate(keySpec); + } catch (InvalidKeySpecException e) { + log.error("InvalidKeySpecException : "+e.getMessage()); + throw new TechnicalException("80000", "InvalidKeySpecException : "+e.getMessage()); + } catch (NoSuchAlgorithmException e) { + log.error("NoSuchAlgorithmException : "+e.getMessage()); + throw new TechnicalException("80000", "NoSuchAlgorithmException : "+e.getMessage()); + } + return privateKey; + } + + public static PublicKey getPublicKey(String base64PublicKey){ + PublicKey publicKey = null; + X509EncodedKeySpec keySpec = new X509EncodedKeySpec(Base64.getDecoder().decode(base64PublicKey.getBytes())); + try { + KeyFactory keyFactory = KeyFactory.getInstance("RSA"); + publicKey = keyFactory.generatePublic(keySpec); + } catch (InvalidKeySpecException e) { + log.error("InvalidKeySpecException : "+e.getMessage()); + throw new TechnicalException("80000", "InvalidKeySpecException : "+e.getMessage()); + } catch (NoSuchAlgorithmException e) { + log.error("NoSuchAlgorithmException : "+e.getMessage()); + throw new TechnicalException("80000", "NoSuchAlgorithmException : "+e.getMessage()); + } + return publicKey; + } + + private static String decryptChipper(byte[] data, PrivateKey privateKey) { + try { + Cipher cipher = Cipher.getInstance("RSA/ECB/OAEPPadding"); + cipher.init(Cipher.DECRYPT_MODE, privateKey); + return new String(cipher.doFinal(data)); + } catch (NoSuchAlgorithmException e) { + log.error("NoSuchAlgorithmException : "+e.getMessage()); + throw new TechnicalException("80000", "NoSuchAlgorithmException : "+e.getMessage()); + } catch (NoSuchPaddingException e) { + log.error("NoSuchPaddingException : "+e.getMessage()); + throw new TechnicalException("80000", "NoSuchPaddingException : "+e.getMessage()); + } catch (InvalidKeyException e) { + log.error("InvalidKeyException : "+e.getMessage()); + throw new TechnicalException("80000", "InvalidKeyException : "+e.getMessage()); + } catch (IllegalBlockSizeException e) { + log.error("IllegalBlockSizeException : "+e.getMessage()); + throw new TechnicalException("80000", "IllegalBlockSizeException : "+e.getMessage()); + } catch (BadPaddingException e) { + log.error("BadPaddingException : "+e.getMessage()); + throw new TechnicalException("80000", "BadPaddingException : "+e.getMessage()); + } + } + + private static byte[] encryptChipper(byte[] data, PublicKey publicKey) { + try { + Cipher cipher = Cipher.getInstance("RSA/ECB/OAEPPadding"); + cipher.init(Cipher.ENCRYPT_MODE, publicKey); + return cipher.doFinal(data); + } catch (NoSuchAlgorithmException e) { + log.error("NoSuchAlgorithmException : "+e.getMessage()); + throw new TechnicalException("80000", "NoSuchAlgorithmException : "+e.getMessage()); + } catch (NoSuchPaddingException e) { + log.error("NoSuchPaddingException : "+e.getMessage()); + throw new TechnicalException("80000", "NoSuchPaddingException : "+e.getMessage()); + } catch (InvalidKeyException e) { + log.error("InvalidKeyException : "+e.getMessage()); + throw new TechnicalException("80000", "InvalidKeyException : "+e.getMessage()); + } catch (IllegalBlockSizeException e) { + log.error("IllegalBlockSizeException : "+e.getMessage()); + throw new TechnicalException("80000", "IllegalBlockSizeException : "+e.getMessage()); + } catch (BadPaddingException e) { + log.error("BadPaddingException : "+e.getMessage()); + throw new TechnicalException("80000", "BadPaddingException : "+e.getMessage()); + } + } + + public static String decrypt(String data, String base64PrivateKey) { + return decryptChipper(Base64.getDecoder().decode(data.getBytes()), getPrivateKey(base64PrivateKey)); + } + + public static String encrypt(String data, String base64PublicKey) { + return Base64.getEncoder().encodeToString(encryptChipper(data.getBytes(), getPublicKey(base64PublicKey))); + } + +} diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml new file mode 100644 index 0000000..1fc7e7e --- /dev/null +++ b/src/main/resources/application-local.yml @@ -0,0 +1,35 @@ +#Configuration for database +jwt: + public-key: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx3MRA7zxvaWKrtmPl2hRJLFiyryvj0ZUlmWw9OZIgqwJUDBTsg5yFX4hCQrANV1yy5ibTqAn2APdNCdhGgp8R2YLWrUR2vVGbmnKXXzEDsFpT6cgo+/a+lWaUq8aYEhzVg8Xjmy9oG1s521LklEz/jKD2xNE4OgY2Y1SgfUH+bexs84ZEyUhcSpCrcZenjCns7Ubp9zsWPrXa/j6kr7ZuFWH7nXN/i+oYF0HFhc+hDaVr2R9Q7s56wAQNE8XfI2Q+h4iRI1hWa5Vva9ha1DnCN9McJDLBHoGy1coIUEoQKkDhCNQmdHlubIJYDoFIyfDTrSQIXw2gzrrC9sOgYU64wIDAQAB + private-key: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDHcxEDvPG9pYqu2Y+XaFEksWLKvK+PRlSWZbD05kiCrAlQMFOyDnIVfiEJCsA1XXLLmJtOoCfYA900J2EaCnxHZgtatRHa9UZuacpdfMQOwWlPpyCj79r6VZpSrxpgSHNWDxeObL2gbWznbUuSUTP+MoPbE0Tg6BjZjVKB9Qf5t7GzzhkTJSFxKkKtxl6eMKeztRun3OxY+tdr+PqSvtm4VYfudc3+L6hgXQcWFz6ENpWvZH1DuznrABA0Txd8jZD6HiJEjWFZrlW9r2FrUOcI30xwkMsEegbLVyghQShAqQOEI1CZ0eW5sglgOgUjJ8NOtJAhfDaDOusL2w6BhTrjAgMBAAECggEAL8SPPqXx/8m1/Up96XVCeddCIewu39GoUJzqVL0SgLlTQbFRWkO7bwpWPyQkBKPs6nYSPDJ/WG0UfXkw+FuqiC8YaREUxawYwjj0Do/jJOWNo1YTqy+28l2uKD9nwceYV/QlYCcLA3Exs/upLdHk8eyHR+DFjlgIG5KNQDK/Rj8cLdQGJjAZjHUGzaRq/HhDi+0LVkOoUvzbzle8RSiiZnNrxCt0UV1CambQzvyxXzqLgtGe4s+qItwk/zzkvXDRnRju3+/AyaFaToA2Wnp9gdV2rT4cRGHhj0Dqh0vwrBH4RiPtEfLQjIa9DhTPHfpr6ACGe6GF96fJ889WIEl4gQKBgQDrGgYKGwIhY9j2V7tu6eHmLxYFGzxSPOtfBZPzSLUyQXrcd6wFlb+Fsae2bgBFZJzilIv4lG0wNaGSFjAjteyXMoqVCTIUKJCjzWs+g3qjuA5fu9IAeWEEaXuKSVvkV5tJrnwhmqYdH1jQx5xhpO434W2a4wuEgOnU6SzNjvS/TwKBgQDZLb3Q9KRwlMcyt/rgjeTOf2SD1jvlKD2t+YRuaxlzBs7j99hCEP3GLaTz6/rIptfkutwk10FM/piO5PCyoPXNc2A1Z73ukmsirMRy2G06PfqKBQrV/B9vtIqPW1Agz7KUpXARrHL8Bb6T2ljKl2HU+kC4Pgx2GZQgYnbEvNBGLQKBgQCNf3grFN5PYlzuxxbURofjlmtWX3IKvQechSrqvdPwj2B22L/8DIjc2nPqZIJdQZT6+hTUY+DjpyO7XQdUNuZSieTGlmZBo7iKHdRyJ4fkiZ59F/notyUhFqt4K3bXE7MuwYmMYBuiY399COaiDjYiA9eH5SbFdSFHN5/ziBreGQKBgGZHNG2DyS1745PvMScvq+HT/PJZojt5iBK2v7eAmKujOSwDPMVgWyNJu7VkHOcCLAp8NdDjzs0D2bTx/KkjRJ9NBrIf+UKxkeLymlG7uzUCm0sEtOWxptxkmhyJVGMfbWqzvuOT41LtIaNf4REH2fsDIBekoRm9UhUuSeC9SxjBAoGAP6pdT7HlMsr++XJFqs9+dj7tRsX+a6Coi3T8BFaf2Nl9YxMFFaSBbNOO4QfZWyCUcfbkLrcdEka5VTVt/HwckDKzckxWqH3hMn2+kAKJnHhAvB1M38KAyvdpA54vNgVyID+vL5VbqpHk8wsUbVWZc8F/ERELfuHwzcD0rt6Opnc= + expired-time : + access-token: 480 + refresh-token: 720 + +config: + password: + default-password : plngg123 + private-key: MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCRyUePQWkg+IH5dAvQ/+YlVR1htFdhL2+NJtWWXNW15mBUOEr+yvJsOYAzY9KfxmVqRRr1uQEAaaKjNpxwNEnHkMn8LzSEhRxCd4Mqpa5jquCdPfMqGO3cwdkrQjZVfm3tCBYd2HkOeL8PTwlbBORucf6qHPxZvjGVXQeiRAHTlgHTR1647T1+vlDDcaOBJIrwcD566hqOCKMxtE+5F4DieSYEuHJMyvJf/WH2+LxbP2t4Z6IV0tksQKtwyZstEXd3yIL8chKoFh2p3KO8aFfMa7X0aiDVC3z+o2Hh8+YHQt7cSl+NGRxasuqLbY3twZEC9qAIkkDOpBUp7lLZ9NVHAgMBAAECggEACd0GXGjehf6KPKhfTEqj9Y6mqD+dUdP1xiUEemHZi68EgW41lLuCX1Qcml18mJbBscjvJATaTn7XJBfDycuf2kKvh8Jh2T1wRgbz9uSywceD3t+cHhMFtNPgr46RQoOFSG4toONOfW4p7w034tKX6ekIg9XmNOQrUqGyrIXRYdFADB68HaLxlgS0zKrkhp14+wH/krihfS3H7Z+wBVozWSgyHCVbov68l764w3UWZYEEe2mFl31HqhD5KEo8QXODWuemUTROaXKF/iOsPEMC8Qz4Jdqme+iAlV4b2LNaSTEP/NG/kFIE443RlyFo9YfVNw7/osgAksXAPdOZd8qt8QKBgQDYHLX2HVaGj9zvAlqSKjf6VuuxgdRUYW4rqQjm97YmAJNp4udjKLUgD7yDuImYh/E/IWjDxf1Hf3fTjcc98iPMsvP3lkXxdOxMLLlnMv0Ewxof8gATQndU/w+/XuuAZ9cy3vtheo59i4rFpik8XFAH6kPk/gWI9DAE/IbXuOSNUwKBgQCssaxMwfrB9nwQ9eDXv2z+Ce4sZbtZEJYD3a29OGshLw8AH//z/BxPzZRTFy63IfmmIyYSGaC7ZdkrakLhlBXrhi/P0wafp7xEsONb8uNYWDDWoDewH75GX/SPhx7bX0GSeiX6X5XAUg97j0xlfYllIieMLCw4rLU+97ge5xalvQKBgQDXJjYtEGYczsqYFBLRI0DZdIFvFZ6qZtkElGMtdf0b9kTMDL5pZJR1l9UImcY6WVRekkc3aDvQW2GS9rodvJvRZXMm0K9PRCUfbQMjb4qfnBC9LvLOOcSNlOQ7lCcGjdqbZYyELjv/VtXQEa1Jz2lJh/sR1abzAo9v12vzBbpbywKBgQCkdEZKimeLknivhhbqHgdjHH3NlcuFk3/oipBLI5ERdsjoK5EI/crQTEu1nNwF1brx9YLptbIVA3Z+G6E5RFZjhdO+K42hOJDXMUQyaekKVmGb4dNmS7RdPD+e9uPxsJK3NM850RDApuTLm7j65UOUJaRXnjE2f3HSVwDlnNc6WQKBgQCccgyIJx5HnxdkYYFJBnuwo1aDNo2TOqiy9wPXHzxuR8TsvqmbbYoxT0kJkqOjkbQII08nLyHJ3KL7XK3dCEGmdRArHjo0PCLMzKqBZdhtfxN413HxmwXIF5zM6mhS4g8XrDyNW7EhLp/putnpmE6XI9VnEFx/LxAd8nJ9tUd39A== + public-key: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAkclHj0FpIPiB+XQL0P/mJVUdYbRXYS9vjSbVllzVteZgVDhK/srybDmAM2PSn8ZlakUa9bkBAGmiozaccDRJx5DJ/C80hIUcQneDKqWuY6rgnT3zKhjt3MHZK0I2VX5t7QgWHdh5Dni/D08JWwTkbnH+qhz8Wb4xlV0HokQB05YB00deuO09fr5Qw3GjgSSK8HA+euoajgijMbRPuReA4nkmBLhyTMryX/1h9vi8Wz9reGeiFdLZLECrcMmbLRF3d8iC/HISqBYdqdyjvGhXzGu19Gog1Qt8/qNh4fPmB0Le3EpfjRkcWrLqi22N7cGRAvagCJJAzqQVKe5S2fTVRwIDAQAB + forgot-password: + expired-time: 1440 + file-upload: + rkap : /Users/macbook/smartproc/rkap/ + pendukung: /Users/macbook/smartproc/pendukung/ + +spring: + datasource: + driver-class-name: org.postgresql.Driver + url: jdbc:postgresql://localhost:5432/smartproc + username: postgres + password: postgre + jackson: + default-property-inclusion: NON_NULL + jpa: + hibernate: + ddl-auto: update + database-platform: org.hibernate.dialect.PostgreSQLDialect + show-sql: true + +fe: + server: http://internal.sindigilive.com:8080 \ No newline at end of file diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties deleted file mode 100644 index 2dc4474..0000000 --- a/src/main/resources/application.properties +++ /dev/null @@ -1,12 +0,0 @@ -spring.datasource.url=jdbc:postgresql://localhost:5432/smartproc -spring.datasource.username=postgres -spring.datasource.password=postgres -spring.jpa.show-sql=true - -## Hibernate Properties -# The SQL dialect makes Hibernate generate better SQL for the chosen database -spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect - -# Hibernate ddl auto (create, create-drop, validate, update) -spring.jpa.hibernate.ddl-auto = update -server.port=9090 \ No newline at end of file diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml new file mode 100644 index 0000000..b14266e --- /dev/null +++ b/src/main/resources/application.yml @@ -0,0 +1,7 @@ +spring: + application: + name: "smartproc-service" + profiles: + active: local +server: + port: 9090 \ No newline at end of file diff --git a/src/main/resources/bootstrap.properties b/src/main/resources/bootstrap.properties new file mode 100644 index 0000000..68d2e92 --- /dev/null +++ b/src/main/resources/bootstrap.properties @@ -0,0 +1,5 @@ +spring.application.name=smartproc +spring.profiles.active=@spring.profiles.active@ +management.endpoints.web.exposure.include=* +management.endpoint.health.show-details=ALWAYS +management.metrics.tags.application=${spring.application.name} \ No newline at end of file diff --git a/src/main/resources/template/drp-approval.jrxml b/src/main/resources/template/drp-approval.jrxml new file mode 100644 index 0000000..e69de29