Skip to content

Commit

Permalink
ddd
Browse files Browse the repository at this point in the history
  • Loading branch information
ecsimsw authored and ha-seungwon committed Aug 17, 2023
1 parent 3fc1136 commit 3fe33f0
Show file tree
Hide file tree
Showing 19 changed files with 550 additions and 60 deletions.
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
package se.ton.t210.configuration.filter;

import se.ton.t210.configuration.http.XssCleanHttpRequestWrapper;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

@WebFilter(urlPatterns = {"/api/*"})
public class XssReplacingFilter implements Filter {

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
chain.doFilter(new XssCleanHttpRequestWrapper((HttpServletRequest) request), response);
}
}
//package se.ton.t210.configuration.filter;
//
//import se.ton.t210.configuration.http.XssCleanHttpRequestWrapper;
//
//import javax.servlet.*;
//import javax.servlet.annotation.WebFilter;
//import javax.servlet.http.HttpServletRequest;
//import java.io.IOException;
//
////@WebFilter(urlPatterns = {"/api/*"})
//public class XssReplacingFilter implements Filter {
//
// @Override
// public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// chain.doFilter(new XssCleanHttpRequestWrapper((HttpServletRequest) request), response);
// }
//}
27 changes: 27 additions & 0 deletions src/main/java/se/ton/t210/controller/AdminController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package se.ton.t210.controller;

import org.springframework.data.domain.Pageable;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import se.ton.t210.dto.AccessDateTimeFilter;
import se.ton.t210.dto.AccessDateTimeResponse;
import se.ton.t210.service.AdminService;

import java.util.List;

@RestController
public class AdminController {

private final AdminService adminService;

public AdminController(AdminService adminService) {
this.adminService = adminService;
}

@GetMapping("/api/admin/users/access")
public ResponseEntity<List<AccessDateTimeResponse>> usersMember(Pageable pageable, AccessDateTimeFilter filter) {
final List<AccessDateTimeResponse> responses = adminService.findAll(pageable, filter);
return ResponseEntity.ok(responses);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ public ResponseEntity<String> handledMemberException(AuthException e) {
MethodArgumentTypeMismatchException.class,
HttpMessageNotReadableException.class
})
public ResponseEntity<String> invalidInputPrams() {
public ResponseEntity<String> invalidInputPrams(Exception e) {
return ResponseEntity.badRequest().body("Invalid input request");
}

Expand All @@ -39,7 +39,6 @@ public ResponseEntity<String> handledException(IllegalArgumentException e) {

@ExceptionHandler(InnerServiceException.class)
public ResponseEntity<String> onlyForLogging(InnerServiceException e) {
e.printStackTrace();
if(e.getMessage() != null) {
LOGGER.error(e.getMessage());
}
Expand Down
5 changes: 5 additions & 0 deletions src/main/java/se/ton/t210/controller/PageController.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,11 @@
@Controller
public class PageController {

@GetMapping("/admin")
public String admin() {
return "redirect:/html/admin.html";
}

@GetMapping("/html/application-information")
public String information(@LoginMember LoginMemberInfo memberInfo) {
if(memberInfo.getApplicationType() == ApplicationType.PoliceOfficerMale) {
Expand Down
38 changes: 38 additions & 0 deletions src/main/java/se/ton/t210/domain/AccessDataTimeRepository.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package se.ton.t210.domain;

import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;

import java.time.LocalDateTime;
import java.util.List;

public interface AccessDataTimeRepository extends JpaRepository<AccessDateTime, Long>, JpaSpecificationExecutor<AccessDateTime> {

List<AccessDateTime> findAllByMemberId(Long memberId, Specification<AccessDateTime> spec, Pageable pageable);

List<AccessDateTime> findAllByAccessTimeGreaterThan(LocalDateTime dateFrom);

List<AccessDateTime> findAllByAccessTimeLessThan(LocalDateTime dateTo);

List<AccessDateTime> findAllByAccessTimeGreaterThanAndAccessTimeLessThan(LocalDateTime dateFrom,
LocalDateTime dateTo
);

List<AccessDateTime> findAllByAccessTimeBetween(LocalDateTime dateFrom, LocalDateTime dateTo);

static Specification<AccessDateTime> greaterThanOrEqualsByTime(LocalDateTime dateFrom) {
return (root, query, criteriaBuilder) -> criteriaBuilder.greaterThanOrEqualTo(root.get(AccessDateTime_.accessTime), dateFrom);
}

static Specification<AccessDateTime> lessThanOrEqualsByTime(LocalDateTime dateTo) {
return (root, query, criteriaBuilder) -> criteriaBuilder.lessThanOrEqualTo(root.get(AccessDateTime_.accessTime), dateTo);
}

// static Specification<AccessDateTime> equalsMemberId(Long memberId) {
// return (root, query, criteriaBuilder) -> criteriaBuilder.equal(root.get(AccessDateTime_.memberId), memberId)
// }


}
33 changes: 33 additions & 0 deletions src/main/java/se/ton/t210/domain/AccessDateTime.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package se.ton.t210.domain;

import lombok.Getter;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import java.time.LocalDateTime;

@Getter
@Entity
public class AccessDateTime {

@GeneratedValue(strategy = GenerationType.AUTO)
@Id
private Long id;
private LocalDateTime accessTime;
private Long memberId;

public AccessDateTime() {
}

public AccessDateTime(Long id, LocalDateTime accessTime, Long memberId) {
this.id = id;
this.accessTime = accessTime;
this.memberId = memberId;
}

public AccessDateTime(LocalDateTime accessTime, Long memberId) {
this(null, accessTime, memberId);
}
}
12 changes: 12 additions & 0 deletions src/main/java/se/ton/t210/domain/AccessDateTime_.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package se.ton.t210.domain;

import javax.persistence.metamodel.SingularAttribute;
import javax.persistence.metamodel.StaticMetamodel;
import java.time.LocalDateTime;

@StaticMetamodel(Member.class)
public class AccessDateTime_ {
public static volatile SingularAttribute<AccessDateTime, Long> id;
public static volatile SingularAttribute<AccessDateTime, LocalDateTime> accessTime;
public static volatile SingularAttribute<AccessDateTime, Long> memberId;
}
7 changes: 4 additions & 3 deletions src/main/java/se/ton/t210/domain/MemberRepository.java
Original file line number Diff line number Diff line change
@@ -1,21 +1,22 @@
package se.ton.t210.domain;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import se.ton.t210.domain.type.ApplicationType;
import se.ton.t210.dto.MemberPersonalInfoResponse;

import java.util.Optional;

@Repository
public interface MemberRepository extends JpaRepository<Member, Long> {
public interface MemberRepository extends JpaRepository<Member, Long>, JpaSpecificationExecutor<Member> {

boolean existsByEmail(String email);

boolean existsByEmailAndPassword(String email, String password);

Optional<Member> findByEmail(String email);

Optional<Member> findByName(String name);

int countByApplicationType(ApplicationType applicationType);

MemberPersonalInfoResponse getMemberByEmail(String email);
Expand Down
15 changes: 15 additions & 0 deletions src/main/java/se/ton/t210/domain/Member_.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package se.ton.t210.domain;

import se.ton.t210.domain.type.ApplicationType;

import javax.persistence.metamodel.SingularAttribute;
import javax.persistence.metamodel.StaticMetamodel;

@StaticMetamodel(Member.class)
public class Member_ {
public static volatile SingularAttribute<Member, Long> id;
public static volatile SingularAttribute<Member, String> name;
public static volatile SingularAttribute<Member, String> email;
public static volatile SingularAttribute<Member, String> password;
public static volatile SingularAttribute<Member, ApplicationType> applicationType;
}
3 changes: 2 additions & 1 deletion src/main/java/se/ton/t210/domain/MonthlyScoreRepository.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,14 @@

import org.springframework.data.domain.PageRequest;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import se.ton.t210.domain.type.ApplicationType;

import java.time.LocalDate;
import java.util.List;
import java.util.Optional;

public interface MonthlyScoreRepository extends JpaRepository<MonthlyScore, Long> {
public interface MonthlyScoreRepository extends JpaRepository<MonthlyScore, Long>, JpaSpecificationExecutor<MonthlyScore> {

int countByApplicationType(ApplicationType applicationType);

Expand Down
14 changes: 14 additions & 0 deletions src/main/java/se/ton/t210/domain/MonthlyScore_.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package se.ton.t210.domain;

import se.ton.t210.domain.type.ApplicationType;

import javax.persistence.metamodel.SingularAttribute;
import javax.persistence.metamodel.StaticMetamodel;

@StaticMetamodel(MonthlyScore.class)
public class MonthlyScore_ {
public static volatile SingularAttribute<MonthlyScore, Long> id;
public static volatile SingularAttribute<MonthlyScore, ApplicationType> applicationType;
public static volatile SingularAttribute<MonthlyScore, Integer> score;
public static volatile SingularAttribute<MonthlyScore, Long> memberId;
}
20 changes: 20 additions & 0 deletions src/main/java/se/ton/t210/dto/AccessDateTimeFilter.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package se.ton.t210.dto;

import lombok.Getter;

import java.time.LocalDate;
import java.util.Optional;

@Getter
public class AccessDateTimeFilter {

private Optional<String> memberName;
private Optional<LocalDate> dateFrom;
private Optional<LocalDate> dateTo;

public AccessDateTimeFilter(Optional<String> memberName, Optional<LocalDate> dateFrom, Optional<LocalDate> dateTo) {
this.memberName = memberName;
this.dateFrom = dateFrom;
this.dateTo = dateTo;
}
}
32 changes: 32 additions & 0 deletions src/main/java/se/ton/t210/dto/AccessDateTimeResponse.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package se.ton.t210.dto;

import lombok.Getter;
import se.ton.t210.domain.AccessDateTime;
import se.ton.t210.domain.Member;

import java.time.LocalDateTime;

@Getter
public class AccessDateTimeResponse {

private final LocalDateTime dateTime;
private final String memberName;
private final String memberEmail;
private final String memberEncryptedPassword;

public AccessDateTimeResponse(LocalDateTime dateTime, String memberName, String memberEmail, String memberEncryptedPassword) {
this.dateTime = dateTime;
this.memberName = memberName;
this.memberEmail = memberEmail;
this.memberEncryptedPassword = memberEncryptedPassword;
}

public static AccessDateTimeResponse of(AccessDateTime it, Member member) {
return new AccessDateTimeResponse(
it.getAccessTime(),
member.getName(),
member.getEmail(),
member.getPassword()
);
}
}
44 changes: 44 additions & 0 deletions src/main/java/se/ton/t210/service/AdminService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package se.ton.t210.service;

import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import se.ton.t210.domain.*;
import se.ton.t210.dto.AccessDateTimeFilter;
import se.ton.t210.dto.AccessDateTimeResponse;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

@Service
public class AdminService {

private final MemberRepository memberRepository;
private final MonthlyScoreRepository monthlyScoreRepository;
private final AccessDataTimeRepository accessDataTimeRepository;

public AdminService(MemberRepository memberRepository, MonthlyScoreRepository monthlyScoreRepository, AccessDataTimeRepository accessDataTimeRepository) {
this.memberRepository = memberRepository;
this.monthlyScoreRepository = monthlyScoreRepository;
this.accessDataTimeRepository = accessDataTimeRepository;
}

@Transactional
public List<AccessDateTimeResponse> findAll(Pageable pageable, AccessDateTimeFilter filter) {
final LocalDateTime dateTimeFrom = filter.getDateFrom().orElse(LocalDate.MIN)
.atTime(0, 0, 0);
final LocalDateTime dateTimeTo = filter.getDateTo().orElse(LocalDate.MAX)
.atTime(23, 59, 59);
return accessDataTimeRepository.findAllByAccessTimeBetween(dateTimeTo, dateTimeFrom)
.stream()
.map(it -> {
final Member member = memberRepository.findById(it.getMemberId()).orElseThrow();
return AccessDateTimeResponse.of(it, member);
}).collect(Collectors.toList());
}
}
Loading

0 comments on commit 3fe33f0

Please sign in to comment.