Skip to content

Commit 9176248

Browse files
authored
Merge pull request #90 from eureca-final-capstone-project/develop
main 병합
2 parents f7a7323 + 9bac896 commit 9176248

6 files changed

Lines changed: 232 additions & 0 deletions

File tree

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package eureca.capstone.project.admin.user.entity;
2+
3+
import static com.querydsl.core.types.PathMetadataFactory.*;
4+
5+
import com.querydsl.core.types.dsl.*;
6+
7+
import com.querydsl.core.types.PathMetadata;
8+
import javax.annotation.processing.Generated;
9+
import com.querydsl.core.types.Path;
10+
import com.querydsl.core.types.dsl.PathInits;
11+
12+
13+
/**
14+
* QPlan is a Querydsl query type for Plan
15+
*/
16+
@Generated("com.querydsl.codegen.DefaultEntitySerializer")
17+
public class QPlan extends EntityPathBase<Plan> {
18+
19+
private static final long serialVersionUID = 2053547795L;
20+
21+
private static final PathInits INITS = PathInits.DIRECT2;
22+
23+
public static final QPlan plan = new QPlan("plan");
24+
25+
public final eureca.capstone.project.admin.common.entity.QBaseEntity _super = new eureca.capstone.project.admin.common.entity.QBaseEntity(this);
26+
27+
//inherited
28+
public final DateTimePath<java.time.LocalDateTime> createdAt = _super.createdAt;
29+
30+
public final NumberPath<Long> monthlyDataMb = createNumber("monthlyDataMb", Long.class);
31+
32+
public final NumberPath<Long> planId = createNumber("planId", Long.class);
33+
34+
public final StringPath planName = createString("planName");
35+
36+
public final eureca.capstone.project.admin.common.entity.QTelecomCompany telecomCompany;
37+
38+
//inherited
39+
public final DateTimePath<java.time.LocalDateTime> updatedAt = _super.updatedAt;
40+
41+
public QPlan(String variable) {
42+
this(Plan.class, forVariable(variable), INITS);
43+
}
44+
45+
public QPlan(Path<? extends Plan> path) {
46+
this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
47+
}
48+
49+
public QPlan(PathMetadata metadata) {
50+
this(metadata, PathInits.getFor(metadata, INITS));
51+
}
52+
53+
public QPlan(PathMetadata metadata, PathInits inits) {
54+
this(Plan.class, metadata, inits);
55+
}
56+
57+
public QPlan(Class<? extends Plan> type, PathMetadata metadata, PathInits inits) {
58+
super(type, metadata, inits);
59+
this.telecomCompany = inits.isInitialized("telecomCompany") ? new eureca.capstone.project.admin.common.entity.QTelecomCompany(forProperty("telecomCompany")) : null;
60+
}
61+
62+
}
63+
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package eureca.capstone.project.admin.user.entity;
2+
3+
import static com.querydsl.core.types.PathMetadataFactory.*;
4+
5+
import com.querydsl.core.types.dsl.*;
6+
7+
import com.querydsl.core.types.PathMetadata;
8+
import javax.annotation.processing.Generated;
9+
import com.querydsl.core.types.Path;
10+
import com.querydsl.core.types.dsl.PathInits;
11+
12+
13+
/**
14+
* QUserData is a Querydsl query type for UserData
15+
*/
16+
@Generated("com.querydsl.codegen.DefaultEntitySerializer")
17+
public class QUserData extends EntityPathBase<UserData> {
18+
19+
private static final long serialVersionUID = -1968928513L;
20+
21+
private static final PathInits INITS = PathInits.DIRECT2;
22+
23+
public static final QUserData userData = new QUserData("userData");
24+
25+
public final eureca.capstone.project.admin.common.entity.QBaseEntity _super = new eureca.capstone.project.admin.common.entity.QBaseEntity(this);
26+
27+
public final NumberPath<Long> buyerDataMb = createNumber("buyerDataMb", Long.class);
28+
29+
//inherited
30+
public final DateTimePath<java.time.LocalDateTime> createdAt = _super.createdAt;
31+
32+
public final QPlan plan;
33+
34+
public final NumberPath<Integer> resetDataAt = createNumber("resetDataAt", Integer.class);
35+
36+
public final NumberPath<Long> sellableDataMb = createNumber("sellableDataMb", Long.class);
37+
38+
public final NumberPath<Long> totalDataMb = createNumber("totalDataMb", Long.class);
39+
40+
//inherited
41+
public final DateTimePath<java.time.LocalDateTime> updatedAt = _super.updatedAt;
42+
43+
public final NumberPath<Long> userDataId = createNumber("userDataId", Long.class);
44+
45+
public final NumberPath<Long> userId = createNumber("userId", Long.class);
46+
47+
public QUserData(String variable) {
48+
this(UserData.class, forVariable(variable), INITS);
49+
}
50+
51+
public QUserData(Path<? extends UserData> path) {
52+
this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
53+
}
54+
55+
public QUserData(PathMetadata metadata) {
56+
this(metadata, PathInits.getFor(metadata, INITS));
57+
}
58+
59+
public QUserData(PathMetadata metadata, PathInits inits) {
60+
this(UserData.class, metadata, inits);
61+
}
62+
63+
public QUserData(Class<? extends UserData> type, PathMetadata metadata, PathInits inits) {
64+
super(type, metadata, inits);
65+
this.plan = inits.isInitialized("plan") ? new QPlan(forProperty("plan"), inits.get("plan")) : null;
66+
}
67+
68+
}
69+

src/main/java/eureca/capstone/project/admin/report/service/impl/RestrictionServiceImpl.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@
44
import eureca.capstone.project.admin.auth.entity.UserAuthority;
55
import eureca.capstone.project.admin.auth.repository.UserAuthorityRepository;
66
import eureca.capstone.project.admin.common.entity.Status;
7+
import eureca.capstone.project.admin.common.exception.code.ErrorCode;
78
import eureca.capstone.project.admin.common.exception.custom.AlreadyProcessedRestrictionException;
89
import eureca.capstone.project.admin.common.exception.custom.RestrictionTargetNotFoundException;
10+
import eureca.capstone.project.admin.common.exception.custom.UserNotFoundException;
911
import eureca.capstone.project.admin.common.service.RedisService;
1012
import eureca.capstone.project.admin.common.util.StatusManager;
1113
import eureca.capstone.project.admin.report.dto.response.RestrictionDto;
@@ -22,6 +24,8 @@
2224
import eureca.capstone.project.admin.transaction_feed.repository.TransactionFeedRepository;
2325
import eureca.capstone.project.admin.transaction_feed.repository.TransactionFeedSearchRepository;
2426
import eureca.capstone.project.admin.user.entity.User;
27+
import eureca.capstone.project.admin.user.entity.UserData;
28+
import eureca.capstone.project.admin.user.repository.UserDataRepository;
2529
import lombok.RequiredArgsConstructor;
2630
import lombok.extern.slf4j.Slf4j;
2731
import org.springframework.data.domain.Page;
@@ -31,6 +35,7 @@
3135

3236
import java.time.LocalDateTime;
3337
import java.util.List;
38+
import java.util.Objects;
3439
import java.util.concurrent.TimeUnit;
3540

3641
import static eureca.capstone.project.admin.common.entity.StatusConst.FEED;
@@ -49,6 +54,7 @@ public class RestrictionServiceImpl implements RestrictionService {
4954
private final UserAuthorityRepository userAuthorityRepository;
5055
private final TransactionFeedSearchRepository transactionFeedSearchRepository;
5156
private final RedisService redisService;
57+
private final UserDataRepository userDataRepository;
5258

5359
@Override
5460
public Page<RestrictionDto> getRestrictionListByStatusCode(String statusCode,String keyword, Pageable pageable) {
@@ -71,6 +77,7 @@ public void acceptRestrictions(Long restrictionTargetId) {
7177
}
7278

7379
User user = restrictionTarget.getUser();
80+
Long userId = user.getUserId();
7481
RestrictionType restrictionType = restrictionTarget.getRestrictionType();
7582
Integer duration = restrictionType.getDuration();
7683

@@ -141,6 +148,17 @@ public void acceptRestrictions(Long restrictionTargetId) {
141148
transactionFeedRepository.saveAll(transactionFeedsToBlur);
142149
log.info("[acceptRestrictions] 연관된 게시글 {}건의 상태를 'BLURRED'로 변경했습니다.", transactionFeedsToBlur.size());
143150

151+
// 블러처리된 게시글은 보이지 않으므로 판매도 안됨. 그러므로 판매가능 데이터를 유저에게 다시 돌려줌
152+
UserData userData = userDataRepository.findByUserId(userId).orElseThrow(UserNotFoundException::new);
153+
long restoredDataAmount = transactionFeedsToBlur.stream()
154+
.map(TransactionFeed::getSalesDataAmount)
155+
.filter(Objects::nonNull)
156+
.mapToLong(Long::longValue)
157+
.sum();
158+
159+
userData.addSellableData(restoredDataAmount);
160+
log.info("[acceptRestrictions] 제재된 게시글들의 판매 데이터 {}만큼 유저에게 환불 처리함.", restoredDataAmount);
161+
144162
try {
145163
List<TransactionFeedDocument> documentsToUpdate = transactionFeedsToBlur.stream()
146164
.map(TransactionFeedDocument::fromEntity) // TransactionFeed 엔티티를 Document로 변환
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package eureca.capstone.project.admin.user.entity;
2+
3+
4+
import eureca.capstone.project.admin.common.entity.BaseEntity;
5+
import eureca.capstone.project.admin.common.entity.TelecomCompany;
6+
import jakarta.persistence.*;
7+
import lombok.AllArgsConstructor;
8+
import lombok.Builder;
9+
import lombok.Getter;
10+
import lombok.NoArgsConstructor;
11+
12+
@Entity
13+
@Getter
14+
@NoArgsConstructor
15+
@AllArgsConstructor
16+
@Builder
17+
@Table(name = "plan")
18+
public class Plan extends BaseEntity {
19+
20+
@Id
21+
@GeneratedValue(strategy = GenerationType.IDENTITY)
22+
private Long planId;
23+
24+
@ManyToOne(fetch = FetchType.LAZY)
25+
private TelecomCompany telecomCompany;
26+
27+
private String planName;
28+
private Long monthlyDataMb;
29+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package eureca.capstone.project.admin.user.entity;
2+
3+
import eureca.capstone.project.admin.common.entity.BaseEntity;
4+
import jakarta.persistence.*;
5+
import lombok.AllArgsConstructor;
6+
import lombok.Builder;
7+
import lombok.Getter;
8+
import lombok.NoArgsConstructor;
9+
10+
@Entity
11+
@Getter
12+
@NoArgsConstructor
13+
@AllArgsConstructor
14+
@Builder
15+
@Table(name = "user_data")
16+
public class UserData extends BaseEntity {
17+
18+
@Id
19+
@GeneratedValue(strategy = GenerationType.IDENTITY)
20+
private Long userDataId;
21+
22+
private Long userId;
23+
24+
@JoinColumn(name = "plan_id")
25+
@ManyToOne(fetch = FetchType.LAZY)
26+
private Plan plan;
27+
28+
private Long totalDataMb; // 총 소유 데이터
29+
private Long sellableDataMb; // 판매 가능한 데이터
30+
private Long buyerDataMb; // 구매한 데이터
31+
private Integer resetDataAt; // 데이터 초기화 날짜
32+
33+
public void addSellableData(long amount) {
34+
this.sellableDataMb += amount;
35+
}
36+
37+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package eureca.capstone.project.admin.user.repository;
2+
3+
import eureca.capstone.project.admin.user.entity.UserData;
4+
import jakarta.persistence.LockModeType;
5+
import org.springframework.data.jpa.repository.JpaRepository;
6+
import org.springframework.data.jpa.repository.Lock;
7+
import org.springframework.data.jpa.repository.Query;
8+
9+
import java.util.Optional;
10+
11+
public interface UserDataRepository extends JpaRepository<UserData, Long> {
12+
13+
@Lock(LockModeType.PESSIMISTIC_WRITE)
14+
@Query("select u from UserData u where u.userId = :userId")
15+
Optional<UserData> findByUserId(Long userId);
16+
}

0 commit comments

Comments
 (0)