diff --git a/src/main/java/team5/smartTowns/rewards/Pack.java b/src/main/java/team5/smartTowns/rewards/Pack.java index 2c06025b00264ec789c319c2c6e6dac7af8a8985..20f12213fb30eb69d1059f278d72f96ff2c79840 100644 --- a/src/main/java/team5/smartTowns/rewards/Pack.java +++ b/src/main/java/team5/smartTowns/rewards/Pack.java @@ -11,6 +11,7 @@ public class Pack extends Reward{ public Pack(int id, String name, String description) { super(id, name, description); + displayImg = super.findImagePath(); } public void setProgression(List<Sticker> packStickers, List<Sticker> userStickers){ diff --git a/src/main/java/team5/smartTowns/rewards/Reward.java b/src/main/java/team5/smartTowns/rewards/Reward.java index 6ae302407cc70f9ba07e7603bf3ff7be3e9b35a4..dd45b90513391d13ce050ed8b3a56f062155c12c 100644 --- a/src/main/java/team5/smartTowns/rewards/Reward.java +++ b/src/main/java/team5/smartTowns/rewards/Reward.java @@ -18,7 +18,6 @@ public abstract class Reward { this.id = id; this.name = name; this.description = description; - displayImg = findImagePath(); } public abstract String getImgFolder(); @@ -32,7 +31,6 @@ public abstract class Reward { /* Finds the image in the Path folder, if image is not found assigns default image */ String imgPath = "images/rewards/" + getImgFolder() + "/" + id + ".png"; String notFoundPath = "images/rewards/" + getImgFolder() + "/" + getDefaultImg(); - File imgFile = new File("src/main/resources/static/" + imgPath); return imgFile.exists() ? imgPath : notFoundPath; } diff --git a/src/main/java/team5/smartTowns/rewards/RewardsController.java b/src/main/java/team5/smartTowns/rewards/RewardsController.java deleted file mode 100644 index 1666e563407eda037519a83b4508c2a41935c50b..0000000000000000000000000000000000000000 --- a/src/main/java/team5/smartTowns/rewards/RewardsController.java +++ /dev/null @@ -1,26 +0,0 @@ -package team5.smartTowns.rewards; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.servlet.ModelAndView; -import team5.smartTowns.users.User; -import team5.smartTowns.users.UserRepository; - -import java.util.List; -import java.util.Map; - -@Controller -public class RewardsController { - - @Autowired - RewardsRepository rewardsRepository; - - @Autowired - UserRepository userRepository; - - - - -} diff --git a/src/main/java/team5/smartTowns/rewards/RewardsRepository.java b/src/main/java/team5/smartTowns/rewards/RewardsRepository.java index 7d8090eaea6126650542af8f66017ef27b643e3c..a11e43725fdeac99830a5ba27e47f8727938ac9c 100644 --- a/src/main/java/team5/smartTowns/rewards/RewardsRepository.java +++ b/src/main/java/team5/smartTowns/rewards/RewardsRepository.java @@ -7,12 +7,12 @@ import team5.smartTowns.rewards.Sticker; import java.util.List; public interface RewardsRepository { - List<Badge> getAllBadges(); - List<Sticker> getAllStickers(); List<Sticker> getAllStickersFromPack(int packID); + List<Sticker> getAllStickersFromUser(int userID); + List<Pack> getAllPacks(); Pack findPackByID(int id); diff --git a/src/main/java/team5/smartTowns/rewards/RewardsRepositoryJDBC.java b/src/main/java/team5/smartTowns/rewards/RewardsRepositoryJDBC.java index d2369267560413e19117f2b139d4793f6cabbca2..8ca624464cd18de018b0c98024f7c4c8f15dcd96 100644 --- a/src/main/java/team5/smartTowns/rewards/RewardsRepositoryJDBC.java +++ b/src/main/java/team5/smartTowns/rewards/RewardsRepositoryJDBC.java @@ -17,27 +17,17 @@ public class RewardsRepositoryJDBC implements RewardsRepository { public RewardsRepositoryJDBC(JdbcTemplate aJdbc) { this.jdbc = aJdbc; - setBadgeMapper(); setStickerMapper(); setPackMapper(); } - private void setBadgeMapper(){ - badgeMapper = (rs, i) -> new Badge( - rs.getInt("badgeID"), - rs.getString("name"), - rs.getString("description"), - rs.getInt("difficulty") - ); - } - private void setStickerMapper(){ stickerMapper = (rs, i) -> new Sticker( - rs.getInt("id"), + rs.getInt("packID"), + rs.getInt("stickerID"), rs.getString("name"), rs.getString("description"), - rs.getInt("rarity"), - rs.getInt("packID") + rs.getInt("rarity") ); } private void setPackMapper(){ @@ -61,20 +51,24 @@ public class RewardsRepositoryJDBC implements RewardsRepository { } @Override - public List<Badge> getAllBadges(){ - String sql= "SELECT * FROM badges"; - return jdbc.query(sql, badgeMapper); - } - public List<Sticker> getAllStickersFromPack(int packID){ String sql= "SELECT * FROM stickers WHERE packID="+packID; return jdbc.query(sql, stickerMapper); } + @Override + public List<Sticker> getAllStickersFromUser(int userID) { + /* FINDS ALL STICKERS UNLOCKED BY THE GIVEN USER */ + String sql= "SELECT * FROM stickers LEFT JOIN stickerprogress " + + "ON (stickers.id, stickers.packID) = (stickerprogress.stickerID, stickerprogress.packID) " + + "WHERE stickerprogress.userID="+userID; + return jdbc.query(sql, stickerMapper); + } + @Override public Pack findPackByID(int id){ String sql= "SELECT * FROM packs WHERE id="+id; List<Pack> result = jdbc.query(sql, packMapper); - return result.get(0); + return result.isEmpty() ? null : result.get(0); } } diff --git a/src/main/java/team5/smartTowns/rewards/Sticker.java b/src/main/java/team5/smartTowns/rewards/Sticker.java index 0dd4e825196a44caf724f1ce7be7e11d1200f040..2634e8acd5e573e742fa6d2d9979ad5091baea52 100644 --- a/src/main/java/team5/smartTowns/rewards/Sticker.java +++ b/src/main/java/team5/smartTowns/rewards/Sticker.java @@ -8,19 +8,22 @@ import lombok.Getter; public class Sticker extends Reward{ /* Stickers are randomly earned rewards from a specific pack */ - int rarity; //1-5 + final int rarity; //1-5 + final int packID; + boolean hasSticker; - int packID; - public Sticker(int id, String name, String description, int rarity, int packID) { + + public Sticker(int packID, int id, String name, String description, int rarity) { super(id, name, description); this.rarity = rarity; this.packID = packID; + displayImg = super.findImagePath(); } @Override public String getImgFolder() { - return "stickers"; + return "stickers/" + getPackID(); } public boolean hasSticker(){ diff --git a/src/main/java/team5/smartTowns/users/User.java b/src/main/java/team5/smartTowns/users/User.java index 632984b98d224718ed9a33c7e60766cdb687ff6f..ba3f78736a381927de0621c1ee20b93fd22a4384 100644 --- a/src/main/java/team5/smartTowns/users/User.java +++ b/src/main/java/team5/smartTowns/users/User.java @@ -1,14 +1,17 @@ package team5.smartTowns.users; +import lombok.Getter; +import lombok.Setter; import team5.smartTowns.rewards.Badge; import team5.smartTowns.rewards.Sticker; import lombok.Data; import java.io.File; import java.util.HashMap; +import java.util.List; import java.util.Map; -@Data +@Getter public class User { int id; @@ -16,9 +19,6 @@ public class User { String name; String imgPath; - Map<Badge, Integer> badgeProgress = new HashMap<>(); // Demonstrates the progress towards a specific badge (0-100) - Map<Sticker, Boolean> hasStickers = new HashMap<>(); // True if User has sticker (key) - public User(int id, String email, String name) { this.id = id; this.email = email; diff --git a/src/main/java/team5/smartTowns/users/UserController.java b/src/main/java/team5/smartTowns/users/UserController.java index d86675595962232be59a9d5978d3eda4adcbec3c..e22aff62537dc8a1aee9481800949d7eadc76c6a 100644 --- a/src/main/java/team5/smartTowns/users/UserController.java +++ b/src/main/java/team5/smartTowns/users/UserController.java @@ -1,7 +1,6 @@ package team5.smartTowns.users; -import team5.smartTowns.rewards.Badge; import team5.smartTowns.rewards.Pack; import team5.smartTowns.rewards.RewardsRepository; import team5.smartTowns.rewards.Sticker; @@ -41,57 +40,51 @@ public class UserController { @GetMapping("/user/{id}") public ModelAndView getUserPage(@PathVariable int id) { ModelAndView mav = new ModelAndView("users/userProfile"); - List<Sticker> allStickers = rewardsRepository.getAllStickers(); List<Pack> allPacks = rewardsRepository.getAllPacks(); - - - - List<User> users = userRepository.getAllUsers(); - Map<Long, Boolean> userStickers = userRepository.getStickers(id); - for (Long stickerID : userStickers.keySet()) { //Finds and updates visibility of stickers based on what the user has - allStickers.stream() - .filter(sticker -> sticker.getId()==stickerID) - .findFirst().ifPresent(sticker -> sticker.setVisibility(userStickers.get(stickerID))); - } - mav.addObject("user", userRepository.getUser(id)); + mav.addObject("user", userRepository.getUserById(id)); mav.addObject("packs", allPacks); - mav.addAllObjects(getPackInfo(id, 1).getModelMap()); + mav.addAllObjects(getPackInfo(id, 1).getModelMap()); return mav; } @GetMapping("/packInfo/{userID}/{packID}") public ModelAndView getPackInfo(@PathVariable int userID, @PathVariable int packID) { + /* Displays on page the stickers present in the pack and colour the ones the + * user has acquired */ + ModelAndView mav = new ModelAndView("users/userFrags :: stickersBox"); List<Sticker> allStickers = rewardsRepository.getAllStickersFromPack(packID); - Map<Long, Boolean> userStickers = userRepository.getStickers(userID); + List<Long> userStickers = userRepository.getUserStickersFromPack(userID, packID); - for (Long stickerID : userStickers.keySet()) { //Finds and updates visibility of stickers based on what the user has - allStickers.stream() - .filter(sticker -> sticker.getId()==stickerID) - .findFirst().ifPresent(sticker -> sticker.setVisibility(true)); - } - mav.addObject("stickers", allStickers); - int progress = getPackProgress(allStickers); - mav.addObject("progress", progress); + + mav.addObject("stickers", setStickerVisibility(allStickers, userStickers)); + mav.addObject("progress", getPackProgress(allStickers)); mav.addObject("selectedPack", rewardsRepository.findPackByID(packID)); return mav; } - public int getPackProgress(List<Sticker> allStickers){ - /* GETS PROGRESS FOR GIVEN PACK*/ + public int getPackProgress(List<Sticker> userStickers){ + /* Returns the % of completion of given userStickers */ double progress = 0; - try { - progress = ( - (double) allStickers.stream().filter(Sticker::hasSticker).count() - / allStickers.size() ) - * 100; - } catch (ArithmeticException e){ //allStickers is empty - progress = 0; + if (!userStickers.isEmpty()) { + progress = userStickers.stream().filter(Sticker::hasSticker).count(); + progress = progress / userStickers.size(); + progress = Math.round(progress * 100); + } + return (int) progress; + } + + public List<Sticker> setStickerVisibility(List<Sticker> displayedStickers, List<Long> userStickers){ + /* Makes displayedStickers which are present in userStickers visible */ + for (Long stickerID : userStickers) { + displayedStickers.stream() + .filter(sticker -> sticker.getId()==stickerID) //Tries to find matching id from the two lists + .findFirst().ifPresent(sticker -> sticker.setVisibility(true)); } - return (int)progress; + return displayedStickers; } } diff --git a/src/main/java/team5/smartTowns/users/UserRepository.java b/src/main/java/team5/smartTowns/users/UserRepository.java index 772e021c773253715f7a039a2de201b2d9538a03..8b08f257377c04d8f58a703e559d34baa2e9f4a4 100644 --- a/src/main/java/team5/smartTowns/users/UserRepository.java +++ b/src/main/java/team5/smartTowns/users/UserRepository.java @@ -6,7 +6,7 @@ import java.util.Map; public interface UserRepository { List<User> getAllUsers(); -// Map<Long, Integer> getBadgeProgress(int id); - Map<Long, Boolean> getStickers(int id); - User getUser(int id); + List<Long> getUserStickersFromPack(int userID, int packID); + User getUserById(int userID); + boolean unlockSticker(int userID, int packID, int stickerID); } diff --git a/src/main/java/team5/smartTowns/users/UserRepositoryJDBC.java b/src/main/java/team5/smartTowns/users/UserRepositoryJDBC.java index 214929ede1901587d23a5255b7ba5550e25b13a8..37f759f105a34ef32c655c912cf4355de571cfd1 100644 --- a/src/main/java/team5/smartTowns/users/UserRepositoryJDBC.java +++ b/src/main/java/team5/smartTowns/users/UserRepositoryJDBC.java @@ -4,6 +4,7 @@ package team5.smartTowns.users; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; import org.springframework.stereotype.Repository; +import team5.smartTowns.rewards.Sticker; import java.util.HashMap; import java.util.List; @@ -20,7 +21,6 @@ public class UserRepositoryJDBC implements UserRepository{ setUserMapper(); } - private void setUserMapper(){ userMapper = (rs, i) -> new User( rs.getInt("id"), @@ -36,33 +36,23 @@ public class UserRepositoryJDBC implements UserRepository{ } @Override - public User getUser(int id){ - String sql= "SELECT * FROM users WHERE id="+id; + public User getUserById(int userID){ + String sql= "SELECT * FROM users WHERE id="+userID; List<User> result = jdbc.query(sql, userMapper); - return result.get(0); + return result.isEmpty() ? null : result.get(0); } @Override - public Map<Long, Boolean> getStickers(int id){ - String sql = "SELECT stickerID, hasSticker FROM stickerprogress WHERE userID=" + id; - List<Map<String, Object>> query = jdbc.queryForList(sql); - Map<Long, Boolean> progress = new HashMap<>(); - for (Map<String, Object> result : query) { - progress.put((Long)result.get("stickerID"), (boolean)result.get("hasSticker")); - } - System.out.println(progress); - return progress; + public List<Long> getUserStickersFromPack(int userID, int packID) { + String sql = "SELECT stickerID FROM stickerprogress WHERE (userID, packID)= (" + userID + "," + packID + ")"; + return jdbc.queryForList(sql, Long.class); } - -// @Override -// public Map<Long, Integer> getBadgeProgress(int id){ -// String sql = "SELECT badgeID, progress FROM badgeprogress WHERE userID=" + id; -// List<Map<String, Object>> query = jdbc.queryForList(sql); -// Map<Long, Integer> progress = new HashMap<>(); -// for (Map<String, Object> result : query) { -// progress.put((Long)result.get("badgeID"), (int)result.get("progress")); -// } -// return progress; -// } + @Override + public boolean unlockSticker(int userID, int packID, int stickerID){ + String sql = "INSERT INTO stickerprogress (userID, packID, stickerID) VALUES (" + + userID + ", " + packID + "," + stickerID + ")"; + jdbc.update(sql); + return true; + } } diff --git a/src/main/resources/data.sql b/src/main/resources/data.sql index 0837a3deae70a43557159160c360227b434fbb55..830f9672f0c4bb7c103027a2470d87fb15d259cd 100644 --- a/src/main/resources/data.sql +++ b/src/main/resources/data.sql @@ -38,41 +38,26 @@ delete from packs; insert into packs (name, description) value ('Wales Football Team', 'Pack of Welsh Football Players in the National Team'); insert into packs (name, description) value ('Wales Rugby Team', 'Pack of Welsh Rugby Players in the National Team'); insert into packs (name, description) value ('Welsh Heritage', 'Pack About Welsh Heritage'); -insert into packs (name, description) value ('Pack3', 'This is pack 2'); -insert into packs (name, description) value ('Pack3', 'This is pack 2'); -insert into packs (name, description) value ('Pack3', 'This is pack 2'); -insert into packs (name, description) value ('Pack3', 'This is pack 2'); -insert into packs (name, description) value ('Pack3', 'This is pack 2'); - delete from stickers; -insert into stickers (name, description, rarity, packID) value ('wayne_hennessey', 'Wales Football Team Player', '2', 1); -insert into stickers (name, description, rarity, packID) value ('neco_williams', 'Wales Football Team Player', '2', 1); -insert into stickers (name, description, rarity, packID) value ('joe_morrell', 'Wales Football Team Player', '2', 1); -insert into stickers (name, description, rarity, packID) value ('ethan_ampadu', 'Wales Football Team Player', '2', 1); -insert into stickers (name, description, rarity, packID) value ('connor_roberts', 'Wales Football Team Player', '2', 1); -insert into stickers (name, description, rarity, packID) value ('Taine_Basham', 'Wales Rugby Team Player', '1', 2); -insert into stickers (name, description, rarity, packID) value ('Adam Beard', 'Wales Rugby Team Player', '1', 2); -insert into stickers (name, description, rarity, packID) value ('Elliot Dee', 'Wales Rugby Team Player', '1', 2); -insert into stickers (name, description, rarity, packID) value ('Corey Domachowski', 'Wales Rugby Team Player', '1', 2); -insert into stickers (name, description, rarity, packID) value ('Ryan Elias', 'Wales Rugby Team Player', '1', 2); -insert into stickers (name, description, rarity, packID) value ('Welsh Lady', 'Welsh Heritage', '1', 3); -insert into stickers (name, description, rarity, packID) value ('Welsh Outline', 'Welsh Heritage', '1', 3); -insert into stickers (name, description, rarity, packID) value ('Welsh Spoon', 'Welsh Heritage', '1', 3); +insert into stickers (packID, stickerID, name, description, rarity) value (1, 1, 'wayne_hennessey', 'Wales Football Team Player', '2'); +insert into stickers (packID, stickerID, name, description, rarity) value (1, 2, 'neco_williams', 'Wales Football Team Player', '2'); +insert into stickers (packID, stickerID, name, description, rarity) value (1, 3, 'joe_morrell', 'Wales Football Team Player', '2'); +insert into stickers (packID, stickerID, name, description, rarity) value (1, 4, 'ethan_ampadu', 'Wales Football Team Player', '2'); +insert into stickers (packID, stickerID, name, description, rarity) value (1, 5, 'connor_roberts', 'Wales Football Team Player', '2'); +insert into stickers (packID, stickerID, name, description, rarity) value (2, 1, 'Taine_Basham', 'Wales Rugby Team Player', '1'); +insert into stickers (packID, stickerID, name, description, rarity) value (2, 2, 'Adam Beard', 'Wales Rugby Team Player', '1'); +insert into stickers (packID, stickerID, name, description, rarity) value (2, 3, 'Elliot Dee', 'Wales Rugby Team Player', '1'); +insert into stickers (packID, stickerID, name, description, rarity) value (2, 4, 'Corey Domachowski', 'Wales Rugby Team Player', '1'); +insert into stickers (packID, stickerID, name, description, rarity) value (2, 5, 'Ryan Elias', 'Wales Rugby Team Player', '1'); +insert into stickers (packID, stickerID, name, description, rarity) value (3, 1, 'Welsh Lady', 'Welsh Heritage', '1'); +insert into stickers (packID, stickerID, name, description, rarity) value (3, 2, 'Welsh Outline', 'Welsh Heritage', '1'); +insert into stickers (packID, stickerID, name, description, rarity) value (3, 3, 'Welsh Spoon', 'Welsh Heritage', '1'); delete from stickerprogress; -insert into stickerprogress (userID, stickerID, hasSticker) value ('1', '1', true); -insert into stickerprogress (userID, stickerID, hasSticker) value ('1', '2', true); -insert into stickerprogress (userID, stickerID, hasSticker) value ('1', '3', true); -insert into stickerprogress (userID, stickerID, hasSticker) value ('1', '5', true); -insert into stickerprogress (userID, stickerID, hasSticker) value ('1', '7', true); -insert into stickerprogress (userID, stickerID, hasSticker) value ('1', '9', true); -insert into stickerprogress (userID, stickerID, hasSticker) value ('1', '12', true); -insert into stickerprogress (userID, stickerID, hasSticker) value ('1', '13', true); -insert into stickerprogress (userID, stickerID, hasSticker) value ('2', '2', true); -insert into stickerprogress (userID, stickerID, hasSticker) value ('2', '4', true); -insert into stickerprogress (userID, stickerID, hasSticker) value ('2', '6', true); -insert into stickerprogress (userID, stickerID, hasSticker) value ('2', '7', true); -insert into stickerprogress (userID, stickerID, hasSticker) value ('2', '8', true); -insert into stickerprogress (userID, stickerID, hasSticker) value ('2', '9', true); -insert into stickerprogress (userID, stickerID, hasSticker) value ('2', '10', true); \ No newline at end of file +insert into stickerprogress (userID, packID, stickerID) value (1, 1, 1); +insert into stickerprogress (userID, packID, stickerID) value (1, 1, 2); +insert into stickerprogress (userID, packID, stickerID) value (1, 1, 3); +insert into stickerprogress (userID, packID, stickerID) value (1, 1, 5); +insert into stickerprogress (userID, packID, stickerID) value (1, 2, 1); +insert into stickerprogress (userID, packID, stickerID) value (1, 2, 3); \ No newline at end of file diff --git a/src/main/resources/schema.sql b/src/main/resources/schema.sql index 77da33fcedcf677f6bab7bbd57d3ca1a37849cc2..b46b3d8905f157657ed741a994da4a74a4202c44 100644 --- a/src/main/resources/schema.sql +++ b/src/main/resources/schema.sql @@ -41,18 +41,22 @@ create table if not exists packs create table if not exists stickers ( id bigint auto_increment primary key, - name varchar(30), - description text, - rarity tinyint, packID bigint, FOREIGN KEY (packID) REFERENCES packs(id) - ON DELETE CASCADE - ON UPDATE RESTRICT + ON DELETE CASCADE + ON UPDATE RESTRICT, + stickerID bigint, /*STICKER ID NUMBER WITHIN ITS OWN PACK*/ + name varchar(30), + description text, + rarity tinyint + ) engine=InnoDB; create table if not exists stickerProgress ( + id bigint auto_increment primary key, userID bigint, - stickerID bigint, - hasSticker boolean /*Has sticker or not*/ + packID bigint, + stickerID bigint + ) engine=InnoDB; diff --git a/src/main/resources/static/css/userProfile2.css b/src/main/resources/static/css/userProfile2.css index 605f63c054fe609faab275a294252da2ac0c22e2..513d05a202af6653e101167936ba24120a076507 100644 --- a/src/main/resources/static/css/userProfile2.css +++ b/src/main/resources/static/css/userProfile2.css @@ -170,9 +170,9 @@ main { transition: 0.5s ease-in-out 1ms; border-radius: 20%; } - & .packImg:hover { - transform: scale(1.5, 1.5) - } +} +.packImg:hover { + transform: scale(1.5, 1.5) } .progressionContainer { display: flex; @@ -271,6 +271,7 @@ and (min-device-width: 1000px) { height: 100%; overflow: visible; border: 5px solid rgba(139, 0, 0, 0.5); + justify-content: space-evenly; } .packImg { height: 100px; @@ -278,6 +279,9 @@ and (min-device-width: 1000px) { padding-inline: 1em; margin-inline: 3em; } + .packImg:hover{ + transform: scale(2,2); + } .packImg:hover ~ .packName{ visibility: visible; opacity: 1; diff --git a/src/main/resources/static/images/rewards/stickers/1.png b/src/main/resources/static/images/rewards/stickers/1/1.png similarity index 100% rename from src/main/resources/static/images/rewards/stickers/1.png rename to src/main/resources/static/images/rewards/stickers/1/1.png diff --git a/src/main/resources/static/images/rewards/stickers/2.png b/src/main/resources/static/images/rewards/stickers/1/2.png similarity index 100% rename from src/main/resources/static/images/rewards/stickers/2.png rename to src/main/resources/static/images/rewards/stickers/1/2.png diff --git a/src/main/resources/static/images/rewards/stickers/3.png b/src/main/resources/static/images/rewards/stickers/1/3.png similarity index 100% rename from src/main/resources/static/images/rewards/stickers/3.png rename to src/main/resources/static/images/rewards/stickers/1/3.png diff --git a/src/main/resources/static/images/rewards/stickers/4.png b/src/main/resources/static/images/rewards/stickers/1/4.png similarity index 100% rename from src/main/resources/static/images/rewards/stickers/4.png rename to src/main/resources/static/images/rewards/stickers/1/4.png diff --git a/src/main/resources/static/images/rewards/stickers/5.png b/src/main/resources/static/images/rewards/stickers/1/5.png similarity index 100% rename from src/main/resources/static/images/rewards/stickers/5.png rename to src/main/resources/static/images/rewards/stickers/1/5.png diff --git a/src/main/resources/static/images/rewards/stickers/6.png b/src/main/resources/static/images/rewards/stickers/2/1.png similarity index 100% rename from src/main/resources/static/images/rewards/stickers/6.png rename to src/main/resources/static/images/rewards/stickers/2/1.png diff --git a/src/main/resources/static/images/rewards/stickers/7.png b/src/main/resources/static/images/rewards/stickers/2/2.png similarity index 100% rename from src/main/resources/static/images/rewards/stickers/7.png rename to src/main/resources/static/images/rewards/stickers/2/2.png diff --git a/src/main/resources/static/images/rewards/stickers/8.png b/src/main/resources/static/images/rewards/stickers/2/3.png similarity index 100% rename from src/main/resources/static/images/rewards/stickers/8.png rename to src/main/resources/static/images/rewards/stickers/2/3.png diff --git a/src/main/resources/static/images/rewards/stickers/9.png b/src/main/resources/static/images/rewards/stickers/2/4.png similarity index 100% rename from src/main/resources/static/images/rewards/stickers/9.png rename to src/main/resources/static/images/rewards/stickers/2/4.png diff --git a/src/main/resources/static/images/rewards/stickers/10.png b/src/main/resources/static/images/rewards/stickers/2/5.png similarity index 100% rename from src/main/resources/static/images/rewards/stickers/10.png rename to src/main/resources/static/images/rewards/stickers/2/5.png diff --git a/src/main/resources/static/images/rewards/stickers/11.png b/src/main/resources/static/images/rewards/stickers/3/1.png similarity index 100% rename from src/main/resources/static/images/rewards/stickers/11.png rename to src/main/resources/static/images/rewards/stickers/3/1.png diff --git a/src/main/resources/static/images/rewards/stickers/12.png b/src/main/resources/static/images/rewards/stickers/3/2.png similarity index 100% rename from src/main/resources/static/images/rewards/stickers/12.png rename to src/main/resources/static/images/rewards/stickers/3/2.png diff --git a/src/main/resources/static/images/rewards/stickers/13.png b/src/main/resources/static/images/rewards/stickers/3/3.png similarity index 100% rename from src/main/resources/static/images/rewards/stickers/13.png rename to src/main/resources/static/images/rewards/stickers/3/3.png