Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
803ba68
Fixed controversies filters (#3)
ScarletRedMan Oct 2, 2023
58c4f56
Updated checking controversies filters (#3)
ScarletRedMan Oct 2, 2023
ed8893d
Added search level by id (#3)
ScarletRedMan Oct 2, 2023
a8409d4
Connected all filters in controller (#3)
ScarletRedMan Oct 2, 2023
8d11e9d
Added filters for difficulty and length (#3)
ScarletRedMan Oct 2, 2023
1cabd91
Implemented all filters (#3)
ScarletRedMan Oct 2, 2023
10b1899
Added indexes for level entity (#3)
ScarletRedMan Oct 2, 2023
3722cde
Added search type enum (#3)
ScarletRedMan Oct 2, 2023
76f3b48
Added more test levels (#3)
ScarletRedMan Oct 2, 2023
f0fec63
Fixed display of level pages info (#3)
ScarletRedMan Oct 2, 2023
20100b1
Implemented some filters (bug with hibernate)
ScarletRedMan Oct 9, 2023
aeb78f4
Disabled sorting(enable after fix hibernate criteria bug)
ScarletRedMan Nov 9, 2023
f670abf
Prepared controller for messaging
ScarletRedMan Oct 9, 2023
869f024
Prepared response for GetMessages method
ScarletRedMan Oct 12, 2023
2efed0d
Prepared response for GetMessage method
ScarletRedMan Oct 12, 2023
282451a
Implemented messages repository, service, controller (#4)
ScarletRedMan Oct 16, 2023
c33b4ee
Added profile for test config
ScarletRedMan Oct 16, 2023
f1d51f7
Fixed in-game pagination issue
ScarletRedMan Oct 16, 2023
dfbe207
Added test messages
ScarletRedMan Oct 16, 2023
aa823b0
Added event publishing for sending messages
ScarletRedMan Oct 16, 2023
0b2b7e5
used env in configs, updated docker-compose, added Dockerfile
ScarletRedMan Oct 29, 2023
849d52c
Updated README.md
ScarletRedMan Nov 6, 2023
72a53c2
Added more test levels (#3)
ScarletRedMan Oct 2, 2023
030f9c5
Fixed display of level pages info (#3)
ScarletRedMan Oct 2, 2023
8692d3d
Merge branch 'master' into feature/search-level
ScarletRedMan Nov 9, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 18 additions & 3 deletions src/main/java/ru/scarletredman/gd2spring/config/TestConfig.java
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
package ru.scarletredman.gd2spring.config;

import java.sql.Timestamp;
import java.time.Instant;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import ru.scarletredman.gd2spring.model.Level;
import ru.scarletredman.gd2spring.model.User;
import ru.scarletredman.gd2spring.model.UserComment;
import ru.scarletredman.gd2spring.model.embedable.LevelRateInfo;
import ru.scarletredman.gd2spring.service.LevelService;
import ru.scarletredman.gd2spring.service.MessageService;
import ru.scarletredman.gd2spring.service.UserCommentService;
Expand Down Expand Up @@ -44,8 +47,10 @@ void createTestUser(boolean debugMode) {
userCommentService.writeComment(new UserComment(u, "Hello world!!!"));
}

var level = createTestLevel(user, "Test level");
levelService.uploadLevel(level);
for (int i = 0; i < 30; i++) {
var level = createTestLevel(user, "Test level " + i, i, i * 2, i % 4, i % 3 == 0);
levelService.uploadLevel(level);
}

var user2 = userService.findUserById(2).get();
for (int i = 0; i < 30; i++) {
Expand All @@ -54,11 +59,14 @@ void createTestUser(boolean debugMode) {
}
}

Level createTestLevel(User owner, String name) {
Level createTestLevel(User owner, String name, int likes, int downloads, int stars, boolean featured) {
var level = new Level(owner, name);
level.setDescription("Hello world!");
level.setObjects(4);

level.setLikes(likes);
level.setDownloads(downloads);

var data = level.getData();
data.setExtra(
"0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0");
Expand All @@ -68,6 +76,13 @@ Level createTestLevel(User owner, String name) {

var rate = level.getRate();
rate.setRequestedStars(10);
rate.setStars(stars);
rate.setDifficulty(LevelRateInfo.Difficulty.values()[stars]);
rate.setFeatured(featured);
rate.setEpic(featured);
if (stars != 0 || featured) {
rate.setRateTime(Timestamp.from(Instant.now()));
}

return level;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,12 @@
import org.springframework.web.bind.annotation.RestController;
import ru.scarletredman.gd2spring.controller.annotation.GeometryDashAPI;
import ru.scarletredman.gd2spring.controller.response.GetLevelsResponse;
import ru.scarletredman.gd2spring.model.embedable.LevelFilters;
import ru.scarletredman.gd2spring.model.embedable.LevelRateInfo;
import ru.scarletredman.gd2spring.security.annotation.GDAuthorizedOnly;
import ru.scarletredman.gd2spring.service.LevelService;
import ru.scarletredman.gd2spring.service.type.LevelListPage;
import ru.scarletredman.gd2spring.service.type.LevelSearchType;
import ru.scarletredman.gd2spring.util.ResponseLogger;

@GeometryDashAPI
Expand Down Expand Up @@ -52,24 +55,40 @@ String uploadLevel(
GetLevelsResponse getLevels(
@RequestParam(name = "type") int type,
@RequestParam(name = "str") String levelName,
@RequestParam(name = "diff") String difficulty, // "-" or number
@RequestParam(name = "len") String length, // "-" or number
@RequestParam(name = "diff") String difficulty, // "-" or numbers
@RequestParam(name = "len") String length, // "-" or numbers
@RequestParam(name = "page") int page,
@RequestParam(name = "total") int total,
@RequestParam(name = "uncompleted", required = false, defaultValue = "0") int isUncompleted,
@RequestParam(name = "uncompleted", required = false, defaultValue = "0") int isOnlyUncompleted,
@RequestParam(name = "onlyCompleted", required = false, defaultValue = "0") int isOnlyCompleted,
@RequestParam(name = "featured", required = false, defaultValue = "0") int isFeatured,
@RequestParam(name = "original", required = false, defaultValue = "0") int isOriginal,
@RequestParam(name = "twoPlayer", required = false, defaultValue = "0") int isForTwoPlayers,
@RequestParam(name = "coins", required = false, defaultValue = "0") int hasCoins,
@RequestParam(name = "epic", required = false, defaultValue = "0") int isEpic,
@RequestParam(name = "noStar", required = false, defaultValue = "0") int noStar,
@RequestParam(name = "demonFilter", required = false, defaultValue = "-1") int demonFilter,
@RequestParam(name = "song", required = false, defaultValue = "0") int song,
@RequestParam(name = "customSong", required = false, defaultValue = "0") int customSong) {
@RequestParam(name = "star", required = false, defaultValue = "0") int hasStar,
@RequestParam(name = "demonFilter", required = false, defaultValue = "0") int demonFilter,
@RequestParam(name = "song", required = false, defaultValue = "-1") int song,
@RequestParam(name = "customSong", required = false, defaultValue = "0") int isCustomSong) {

var filters = new LevelListPage.Filters(
levelName, null, null, page, false, false, false, false, false, false, false, false, 0, 0, 0);
levelName,
LevelRateInfo.Difficulty.parseGDSearch(difficulty, demonFilter),
LevelFilters.Length.parseGDSearch(length),
page,
isOnlyCompleted == 1,
isOnlyUncompleted == 1,
isFeatured == 1,
isOriginal == 1,
isForTwoPlayers == 1,
hasCoins == 1,
isEpic == 1,
noStar == 1,
hasStar == 1,
song,
isCustomSong == 1,
LevelSearchType.find(type));

var levels = levelService.getLevels(filters);
return responseLogger.result(new GetLevelsResponse(levels));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ public String getResponse() {
String songs = String.join(
DELIMITER_SONGS, songStats.stream().map(SongStat::getResponse).toList());

String pageInfo = total + ":" + offset + ":10";
String pageInfo = total + ":" + (offset * 10) + ":10";
String hash = generateHash();

return levels + "#" + users + "#" + songs + "#" + pageInfo + "#" + hash;
Expand Down
11 changes: 7 additions & 4 deletions src/main/java/ru/scarletredman/gd2spring/model/Level.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,11 @@
@Entity
@Table(
name = "levels",
indexes = {@Index(name = "level_name_index", columnList = "name")})
indexes = {
@Index(name = "level_name_index", columnList = "name"),
@Index(name = "level_rate_time_index", columnList = "rate_time"),
@Index(name = "level_difficulty_index", columnList = "difficulty")
})
public class Level {

@Id
Expand All @@ -30,9 +34,8 @@ public class Level {
@JoinColumn(name = "owner", nullable = false)
private User owner;

@ManyToOne
@JoinColumn(name = "original")
private Level original = null;
@Column(name = "original")
private Long original = null;

@Embedded
private LevelRateInfo rate = new LevelRateInfo();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

import jakarta.persistence.Column;
import jakarta.persistence.Embeddable;
import java.util.LinkedList;
import java.util.List;
import lombok.*;

@Getter
Expand Down Expand Up @@ -30,5 +32,21 @@ public enum Length {
XL(4);

private final int code;

public static List<Length> parseGDSearch(String input) {
var list = new LinkedList<Length>();
if (input.equals("-")) return list;

var nums = input.split(",");
for (var num : nums) {
try {
var len = values()[Integer.parseInt(num)];
list.add(len);
} catch (NumberFormatException | IndexOutOfBoundsException ignore) {
}
}

return list;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
import jakarta.persistence.Column;
import jakarta.persistence.Embeddable;
import java.sql.Timestamp;
import java.util.LinkedList;
import java.util.List;
import lombok.*;

@Getter
Expand Down Expand Up @@ -71,5 +73,42 @@ public enum Difficulty {
public boolean isAuto() {
return this == AUTO;
}

public static List<Difficulty> parseGDSearch(String input, int demonFilter) {
var list = new LinkedList<Difficulty>();
if (input.equals("-")) return list;

var nums = input.split(",");
for (var num : nums) {
int diff;
try {
diff = Integer.parseInt(num);
} catch (NumberFormatException ignore) {
continue;
}

switch (diff) {
case -1 -> list.add(NONE);
case 1 -> list.add(EASY);
case 2 -> list.add(NORMAL);
case 3 -> list.add(HARD);
case 4 -> list.add(HARDER);
case 5 -> list.add(INSANE);
case -3 -> list.add(AUTO);
case -2 -> {
switch (demonFilter) {
case 0 -> list.add(DEMON);
case 1 -> list.add(EASY_DEMON);
case 2 -> list.add(MEDIUM_DEMON);
case 3 -> list.add(HARD_DEMON);
case 4 -> list.add(INSANE_DEMON);
case 5 -> list.add(EXTREME_DEMON);
}
}
}
}

return list;
}
}
}
Loading