diff --git a/pom.xml b/pom.xml index 0bd87c9..0201199 100644 --- a/pom.xml +++ b/pom.xml @@ -36,10 +36,6 @@ org.springframework.boot spring-boot-starter-data-jpa - - org.springframework.boot - spring-boot-starter-amqp - org.springframework.boot spring-boot-starter-data-redis @@ -89,11 +85,6 @@ 0.7.3 test - - org.springframework.amqp - spring-rabbit-test - test - diff --git a/src/main/java/com/mosquito/project/persistence/entity/ActivityEntity.java b/src/main/java/com/mosquito/project/persistence/entity/ActivityEntity.java new file mode 100644 index 0000000..3195909 --- /dev/null +++ b/src/main/java/com/mosquito/project/persistence/entity/ActivityEntity.java @@ -0,0 +1,62 @@ +package com.mosquito.project.persistence.entity; + +import jakarta.persistence.*; +import java.time.OffsetDateTime; + +@Entity +@Table(name = "activities") +public class ActivityEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(nullable = false, length = 255) + private String name; + + @Column(name = "start_time_utc", nullable = false) + private OffsetDateTime startTimeUtc; + + @Column(name = "end_time_utc", nullable = false) + private OffsetDateTime endTimeUtc; + + @Column(name = "target_users_config", columnDefinition = "jsonb") + private String targetUsersConfig; + + @Column(name = "page_content_config", columnDefinition = "jsonb") + private String pageContentConfig; + + @Column(name = "reward_calculation_mode", length = 50) + private String rewardCalculationMode; + + @Column(length = 50) + private String status; + + @Column(name = "created_at") + private OffsetDateTime createdAt; + + @Column(name = "updated_at") + private OffsetDateTime updatedAt; + + public Long getId() { return id; } + public void setId(Long id) { this.id = id; } + public String getName() { return name; } + public void setName(String name) { this.name = name; } + public OffsetDateTime getStartTimeUtc() { return startTimeUtc; } + public void setStartTimeUtc(OffsetDateTime startTimeUtc) { this.startTimeUtc = startTimeUtc; } + public OffsetDateTime getEndTimeUtc() { return endTimeUtc; } + public void setEndTimeUtc(OffsetDateTime endTimeUtc) { this.endTimeUtc = endTimeUtc; } + public String getTargetUsersConfig() { return targetUsersConfig; } + public void setTargetUsersConfig(String targetUsersConfig) { this.targetUsersConfig = targetUsersConfig; } + public String getPageContentConfig() { return pageContentConfig; } + public void setPageContentConfig(String pageContentConfig) { this.pageContentConfig = pageContentConfig; } + public String getRewardCalculationMode() { return rewardCalculationMode; } + public void setRewardCalculationMode(String rewardCalculationMode) { this.rewardCalculationMode = rewardCalculationMode; } + public String getStatus() { return status; } + public void setStatus(String status) { this.status = status; } + public OffsetDateTime getCreatedAt() { return createdAt; } + public void setCreatedAt(OffsetDateTime createdAt) { this.createdAt = createdAt; } + public OffsetDateTime getUpdatedAt() { return updatedAt; } + public void setUpdatedAt(OffsetDateTime updatedAt) { this.updatedAt = updatedAt; } +} + diff --git a/src/main/java/com/mosquito/project/persistence/entity/ActivityRewardEntity.java b/src/main/java/com/mosquito/project/persistence/entity/ActivityRewardEntity.java new file mode 100644 index 0000000..246185f --- /dev/null +++ b/src/main/java/com/mosquito/project/persistence/entity/ActivityRewardEntity.java @@ -0,0 +1,41 @@ +package com.mosquito.project.persistence.entity; + +import jakarta.persistence.*; + +@Entity +@Table(name = "activity_rewards") +public class ActivityRewardEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(name = "activity_id", nullable = false) + private Long activityId; + + @Column(name = "invite_threshold", nullable = false) + private Integer inviteThreshold; + + @Column(name = "reward_type", nullable = false, length = 50) + private String rewardType; + + @Column(name = "reward_value", nullable = false, length = 255) + private String rewardValue; + + @Column(name = "skip_validation", nullable = false) + private Boolean skipValidation = Boolean.FALSE; + + public Long getId() { return id; } + public void setId(Long id) { this.id = id; } + public Long getActivityId() { return activityId; } + public void setActivityId(Long activityId) { this.activityId = activityId; } + public Integer getInviteThreshold() { return inviteThreshold; } + public void setInviteThreshold(Integer inviteThreshold) { this.inviteThreshold = inviteThreshold; } + public String getRewardType() { return rewardType; } + public void setRewardType(String rewardType) { this.rewardType = rewardType; } + public String getRewardValue() { return rewardValue; } + public void setRewardValue(String rewardValue) { this.rewardValue = rewardValue; } + public Boolean getSkipValidation() { return skipValidation; } + public void setSkipValidation(Boolean skipValidation) { this.skipValidation = skipValidation; } +} + diff --git a/src/main/java/com/mosquito/project/persistence/entity/ApiKeyEntity.java b/src/main/java/com/mosquito/project/persistence/entity/ApiKeyEntity.java new file mode 100644 index 0000000..8700ae3 --- /dev/null +++ b/src/main/java/com/mosquito/project/persistence/entity/ApiKeyEntity.java @@ -0,0 +1,47 @@ +package com.mosquito.project.persistence.entity; + +import jakarta.persistence.*; +import java.time.OffsetDateTime; + +@Entity +@Table(name = "api_keys") +public class ApiKeyEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(nullable = false, length = 255) + private String name; + + @Column(name = "key_hash", nullable = false, length = 255, unique = true) + private String keyHash; + + @Column(nullable = false, length = 255) + private String salt; + + @Column(name = "created_at") + private OffsetDateTime createdAt; + + @Column(name = "revoked_at") + private OffsetDateTime revokedAt; + + @Column(name = "last_used_at") + private OffsetDateTime lastUsedAt; + + public Long getId() { return id; } + public void setId(Long id) { this.id = id; } + public String getName() { return name; } + public void setName(String name) { this.name = name; } + public String getKeyHash() { return keyHash; } + public void setKeyHash(String keyHash) { this.keyHash = keyHash; } + public String getSalt() { return salt; } + public void setSalt(String salt) { this.salt = salt; } + public OffsetDateTime getCreatedAt() { return createdAt; } + public void setCreatedAt(OffsetDateTime createdAt) { this.createdAt = createdAt; } + public OffsetDateTime getRevokedAt() { return revokedAt; } + public void setRevokedAt(OffsetDateTime revokedAt) { this.revokedAt = revokedAt; } + public OffsetDateTime getLastUsedAt() { return lastUsedAt; } + public void setLastUsedAt(OffsetDateTime lastUsedAt) { this.lastUsedAt = lastUsedAt; } +} + diff --git a/src/main/java/com/mosquito/project/persistence/entity/DailyActivityStatsEntity.java b/src/main/java/com/mosquito/project/persistence/entity/DailyActivityStatsEntity.java new file mode 100644 index 0000000..3b5f51c --- /dev/null +++ b/src/main/java/com/mosquito/project/persistence/entity/DailyActivityStatsEntity.java @@ -0,0 +1,47 @@ +package com.mosquito.project.persistence.entity; + +import jakarta.persistence.*; +import java.time.LocalDate; + +@Entity +@Table(name = "daily_activity_stats") +public class DailyActivityStatsEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(name = "activity_id", nullable = false) + private Long activityId; + + @Column(name = "stat_date", nullable = false) + private LocalDate statDate; + + @Column(name = "views", nullable = false) + private Integer views; + + @Column(name = "shares", nullable = false) + private Integer shares; + + @Column(name = "new_registrations", nullable = false) + private Integer newRegistrations; + + @Column(name = "conversions", nullable = false) + private Integer conversions; + + public Long getId() { return id; } + public void setId(Long id) { this.id = id; } + public Long getActivityId() { return activityId; } + public void setActivityId(Long activityId) { this.activityId = activityId; } + public LocalDate getStatDate() { return statDate; } + public void setStatDate(LocalDate statDate) { this.statDate = statDate; } + public Integer getViews() { return views; } + public void setViews(Integer views) { this.views = views; } + public Integer getShares() { return shares; } + public void setShares(Integer shares) { this.shares = shares; } + public Integer getNewRegistrations() { return newRegistrations; } + public void setNewRegistrations(Integer newRegistrations) { this.newRegistrations = newRegistrations; } + public Integer getConversions() { return conversions; } + public void setConversions(Integer conversions) { this.conversions = conversions; } +} + diff --git a/src/main/java/com/mosquito/project/persistence/entity/MultiLevelRewardRuleEntity.java b/src/main/java/com/mosquito/project/persistence/entity/MultiLevelRewardRuleEntity.java new file mode 100644 index 0000000..c36311c --- /dev/null +++ b/src/main/java/com/mosquito/project/persistence/entity/MultiLevelRewardRuleEntity.java @@ -0,0 +1,37 @@ +package com.mosquito.project.persistence.entity; + +import jakarta.persistence.*; +import java.math.BigDecimal; + +@Entity +@Table(name = "multi_level_reward_rules") +public class MultiLevelRewardRuleEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(name = "activity_id", nullable = false) + private Long activityId; + + @Column(nullable = false) + private Integer level; + + @Column(name = "reward_value", nullable = false, precision = 10, scale = 2) + private BigDecimal rewardValue; + + @Column(name = "is_percentage") + private Boolean percentage; + + public Long getId() { return id; } + public void setId(Long id) { this.id = id; } + public Long getActivityId() { return activityId; } + public void setActivityId(Long activityId) { this.activityId = activityId; } + public Integer getLevel() { return level; } + public void setLevel(Integer level) { this.level = level; } + public BigDecimal getRewardValue() { return rewardValue; } + public void setRewardValue(BigDecimal rewardValue) { this.rewardValue = rewardValue; } + public Boolean getPercentage() { return percentage; } + public void setPercentage(Boolean percentage) { this.percentage = percentage; } +} + diff --git a/src/main/java/com/mosquito/project/persistence/repository/ActivityRepository.java b/src/main/java/com/mosquito/project/persistence/repository/ActivityRepository.java new file mode 100644 index 0000000..01eddb5 --- /dev/null +++ b/src/main/java/com/mosquito/project/persistence/repository/ActivityRepository.java @@ -0,0 +1,8 @@ +package com.mosquito.project.persistence.repository; + +import com.mosquito.project.persistence.entity.ActivityEntity; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface ActivityRepository extends JpaRepository { +} + diff --git a/src/main/java/com/mosquito/project/persistence/repository/ActivityRewardRepository.java b/src/main/java/com/mosquito/project/persistence/repository/ActivityRewardRepository.java new file mode 100644 index 0000000..40dcf77 --- /dev/null +++ b/src/main/java/com/mosquito/project/persistence/repository/ActivityRewardRepository.java @@ -0,0 +1,11 @@ +package com.mosquito.project.persistence.repository; + +import com.mosquito.project.persistence.entity.ActivityRewardEntity; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; + +public interface ActivityRewardRepository extends JpaRepository { + List findByActivityIdOrderByInviteThresholdAsc(Long activityId); +} + diff --git a/src/main/java/com/mosquito/project/persistence/repository/ApiKeyRepository.java b/src/main/java/com/mosquito/project/persistence/repository/ApiKeyRepository.java new file mode 100644 index 0000000..ae80be5 --- /dev/null +++ b/src/main/java/com/mosquito/project/persistence/repository/ApiKeyRepository.java @@ -0,0 +1,11 @@ +package com.mosquito.project.persistence.repository; + +import com.mosquito.project.persistence.entity.ApiKeyEntity; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.Optional; + +public interface ApiKeyRepository extends JpaRepository { + Optional findByKeyHash(String keyHash); +} + diff --git a/src/main/java/com/mosquito/project/persistence/repository/DailyActivityStatsRepository.java b/src/main/java/com/mosquito/project/persistence/repository/DailyActivityStatsRepository.java new file mode 100644 index 0000000..c7ec05f --- /dev/null +++ b/src/main/java/com/mosquito/project/persistence/repository/DailyActivityStatsRepository.java @@ -0,0 +1,12 @@ +package com.mosquito.project.persistence.repository; + +import com.mosquito.project.persistence.entity.DailyActivityStatsEntity; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.time.LocalDate; +import java.util.Optional; + +public interface DailyActivityStatsRepository extends JpaRepository { + Optional findByActivityIdAndStatDate(Long activityId, LocalDate statDate); +} + diff --git a/src/main/java/com/mosquito/project/persistence/repository/MultiLevelRewardRuleRepository.java b/src/main/java/com/mosquito/project/persistence/repository/MultiLevelRewardRuleRepository.java new file mode 100644 index 0000000..c7b665a --- /dev/null +++ b/src/main/java/com/mosquito/project/persistence/repository/MultiLevelRewardRuleRepository.java @@ -0,0 +1,11 @@ +package com.mosquito.project.persistence.repository; + +import com.mosquito.project.persistence.entity.MultiLevelRewardRuleEntity; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; + +public interface MultiLevelRewardRuleRepository extends JpaRepository { + List findByActivityIdOrderByLevelAsc(Long activityId); +} +