diff --git a/app/src/main/resources/data.sql b/app/src/main/resources/data.sql index 4c4c222..cbe8cd9 100644 --- a/app/src/main/resources/data.sql +++ b/app/src/main/resources/data.sql @@ -1,127 +1,130 @@ -INSERT INTO reply (post_id, content) -VALUES (1, 'This is a test comment 1.'), - (1, 'This is a test comment 2.'), - (1, 'This is a test comment 3.'), - (1, 'This is a test comment 4.'), - (1, 'This is a test comment 5.'), - (1, 'This is a test comment 6.'), - (1, 'This is a test comment 7.'), - (1, 'This is a test comment 8.'), - (1, 'This is a test comment 9.'), - (1, 'This is a test comment 10.'), - (1, 'This is a test comment 11.'), - (1, 'This is a test comment 12.'), - (1, 'This is a test comment 13.'), - (1, 'This is a test comment 14.'), - (1, 'This is a test comment 15.'), - (1, 'This is a test comment 16.'), - (1, 'This is a test comment 17.'), - (1, 'This is a test comment 18.'), - (1, 'This is a test comment 19.'), - (1, 'This is a test comment 20.'), - (1, 'This is a test comment 21.'), - (1, 'This is a test comment 22.'), - (1, 'This is a test comment 23.'), - (1, 'This is a test comment 24.'), - (1, 'This is a test comment 25.'), - (1, 'This is a test comment 26.'), - (1, 'This is a test comment 27.'), - (1, 'This is a test comment 28.'), - (1, 'This is a test comment 29.'), - (1, 'This is a test comment 30.'), - (1, 'This is a test comment 31.'), - (1, 'This is a test comment 32.'), - (1, 'This is a test comment 33.'), - (1, 'This is a test comment 34.'), - (1, 'This is a test comment 35.'), - (1, 'This is a test comment 36.'), - (1, 'This is a test comment 37.'), - (1, 'This is a test comment 38.'), - (1, 'This is a test comment 39.'), - (1, 'This is a test comment 40.'); +SET @member_id = UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')); -INSERT INTO post (title, content, author_email, author_name, author_picture) -VALUES ('Post 1', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 2', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 3', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 4', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 5', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 6', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 7', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 8', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 9', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 10', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 11', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 12', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 13', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 14', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 15', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 16', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 17', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 18', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 19', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 20', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 21', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 22', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 23', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 24', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 25', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 26', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 27', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 28', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 29', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 30', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 31', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 32', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 33', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 34', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 35', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 36', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 37', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 38', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 39', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 40', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 41', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 42', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 43', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 44', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 45', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 46', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 47', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 48', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 49', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 50', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 51', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 52', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 53', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 54', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 55', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 56', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 57', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 58', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 59', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 60', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 61', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 62', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 63', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 64', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 65', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 66', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 67', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 68', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 69', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 70', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 71', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 72', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 73', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 74', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 75', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 76', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 77', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 78', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 79', null, 'a@gmail.com', 'A', 'https://a.jpg'), - ('Post 80', null, 'a@gmail.com', 'A', 'https://a.jpg'); +INSERT INTO reply (post_id, content, member_id) +VALUES (1, 'This is a test comment 1.', @member_id), + (1, 'This is a test comment 2.', @member_id), + (1, 'This is a test comment 3.', @member_id), + (1, 'This is a test comment 4.', @member_id), + (1, 'This is a test comment 5.', @member_id), + (1, 'This is a test comment 6.', @member_id), + (1, 'This is a test comment 7.', @member_id), + (1, 'This is a test comment 8.', @member_id), + (1, 'This is a test comment 9.', @member_id), + (1, 'This is a test comment 10.', @member_id), + (1, 'This is a test comment 11.', @member_id), + (1, 'This is a test comment 12.', @member_id), + (1, 'This is a test comment 13.', @member_id), + (1, 'This is a test comment 14.', @member_id), + (1, 'This is a test comment 15.', @member_id), + (1, 'This is a test comment 16.', @member_id), + (1, 'This is a test comment 17.', @member_id), + (1, 'This is a test comment 18.', @member_id), + (1, 'This is a test comment 19.', @member_id), + (1, 'This is a test comment 20.', @member_id), + (1, 'This is a test comment 21.', @member_id), + (1, 'This is a test comment 22.', @member_id), + (1, 'This is a test comment 23.', @member_id), + (1, 'This is a test comment 24.', @member_id), + (1, 'This is a test comment 25.', @member_id), + (1, 'This is a test comment 26.', @member_id), + (1, 'This is a test comment 27.', @member_id), + (1, 'This is a test comment 28.', @member_id), + (1, 'This is a test comment 29.', @member_id), + (1, 'This is a test comment 30.', @member_id), + (1, 'This is a test comment 31.', @member_id), + (1, 'This is a test comment 32.', @member_id), + (1, 'This is a test comment 33.', @member_id), + (1, 'This is a test comment 34.', @member_id), + (1, 'This is a test comment 35.', @member_id), + (1, 'This is a test comment 36.', @member_id), + (1, 'This is a test comment 37.', @member_id), + (1, 'This is a test comment 38.', @member_id), + (1, 'This is a test comment 39.', @member_id), + (1, 'This is a test comment 40.', @member_id); + + +INSERT INTO post (title, content, member_id) +VALUES ('Post 1', null, @member_id), + ('Post 2', null, @member_id), + ('Post 3', null, @member_id), + ('Post 4', null, @member_id), + ('Post 5', null, @member_id), + ('Post 6', null, @member_id), + ('Post 7', null, @member_id), + ('Post 8', null, @member_id), + ('Post 9', null, @member_id), + ('Post 10', null, @member_id), + ('Post 11', null, @member_id), + ('Post 12', null, @member_id), + ('Post 13', null, @member_id), + ('Post 14', null, @member_id), + ('Post 15', null, @member_id), + ('Post 16', null, @member_id), + ('Post 17', null, @member_id), + ('Post 18', null, @member_id), + ('Post 19', null, @member_id), + ('Post 20', null, @member_id), + ('Post 21', null, @member_id), + ('Post 22', null, @member_id), + ('Post 23', null, @member_id), + ('Post 24', null, @member_id), + ('Post 25', null, @member_id), + ('Post 26', null, @member_id), + ('Post 27', null, @member_id), + ('Post 28', null, @member_id), + ('Post 29', null, @member_id), + ('Post 30', null, @member_id), + ('Post 31', null, @member_id), + ('Post 32', null, @member_id), + ('Post 33', null, @member_id), + ('Post 34', null, @member_id), + ('Post 35', null, @member_id), + ('Post 36', null, @member_id), + ('Post 37', null, @member_id), + ('Post 38', null, @member_id), + ('Post 39', null, @member_id), + ('Post 40', null, @member_id), + ('Post 41', null, @member_id), + ('Post 42', null, @member_id), + ('Post 43', null, @member_id), + ('Post 44', null, @member_id), + ('Post 45', null, @member_id), + ('Post 46', null, @member_id), + ('Post 47', null, @member_id), + ('Post 48', null, @member_id), + ('Post 49', null, @member_id), + ('Post 50', null, @member_id), + ('Post 51', null, @member_id), + ('Post 52', null, @member_id), + ('Post 53', null, @member_id), + ('Post 54', null, @member_id), + ('Post 55', null, @member_id), + ('Post 56', null, @member_id), + ('Post 57', null, @member_id), + ('Post 58', null, @member_id), + ('Post 59', null, @member_id), + ('Post 60', null, @member_id), + ('Post 61', null, @member_id), + ('Post 62', null, @member_id), + ('Post 63', null, @member_id), + ('Post 64', null, @member_id), + ('Post 65', null, @member_id), + ('Post 66', null, @member_id), + ('Post 67', null, @member_id), + ('Post 68', null, @member_id), + ('Post 69', null, @member_id), + ('Post 70', null, @member_id), + ('Post 71', null, @member_id), + ('Post 72', null, @member_id), + ('Post 73', null, @member_id), + ('Post 74', null, @member_id), + ('Post 75', null, @member_id), + ('Post 76', null, @member_id), + ('Post 77', null, @member_id), + ('Post 78', null, @member_id), + ('Post 79', null, @member_id), + ('Post 80', null, @member_id); INSERT INTO guide (category, content, picture) VALUES ('IRON', '고철로 배출', 'https://ik.imagekit.io/blisgo/guide/rhcjffb.webp'), @@ -881,68 +884,73 @@ VALUES ('PAPER', 1001), ('HOME_APPLIANCES', 1286), ('HOME_APPLIANCES', 1287); -/*INSERT INTO dogam (member_id, waste_id) -VALUES ('okjaeook98@gmail.com', 1001), - ('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', 1002), - ('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', 1003), - ('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', 1004), - ('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', 1005), - ('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', 1006), - ('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', 1007), - ('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', 1008), - ('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', 1009), - ('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', 1010), - ('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', 1011), - ('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', 1012), - ('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', 1013), - ('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', 1014), - ('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', 1015), - ('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', 1016), - ('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', 1017), - ('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', 1018), - ('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', 1019), - ('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', 1020), - ('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', 1021), - ('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', 1022), - ('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', 1023), - ('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', 1024), - ('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', 1025), - ('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', 1026), - ('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', 1027), - ('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', 1028), - ('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', 1029), - ('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', 1030), - ('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', 1031), - ('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', 1032), - ('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', 1033), - ('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', 1034), - ('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', 1035), - ('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', 1036), - ('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', 1037), - ('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', 1038), - ('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', 1039), - ('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', 1040), - ('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', 1041), - ('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', 1042), - ('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', 1043), - ('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', 1044), - ('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', 1045), - ('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', 1046), - ('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', 1047), - ('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', 1048), - ('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', 1049), - ('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', 1050), - ('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', 1051), - ('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', 1052), - ('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', 1053), - ('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', 1054), - ('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', 1055), - ('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', 1056), - ('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', 1057), - ('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', 1058), - ('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', 1059), - ('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', 1060), - ('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', 1061), - ('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', 1062), - ('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', 1063), - ('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', 1064);*/ \ No newline at end of file +INSERT INTO member (member_id, email, name, picture) +VALUES (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 'okjaeook98@gmail.com', '옥재욱', 'https://lh3.googleusercontent.com/a/ACg8ocJPZpvBzDi_TG3kMCt_eESIh1-GoXIJW9TyktH0e3NkPwg=s96-c'); + +SET @time := NOW(); + +INSERT INTO dogam (member_id, waste_id, created_date) +VALUES (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1001, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1002, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1003, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1004, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1005, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1006, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1007, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1008, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1009, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1010, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1011, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1012, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1013, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1014, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1015, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1016, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1017, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1018, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1019, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1020, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1021, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1022, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1023, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1024, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1025, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1026, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1027, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1028, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1029, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1030, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1031, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1032, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1033, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1034, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1035, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1036, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1037, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1038, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1039, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1040, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1041, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1042, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1043, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1044, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1045, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1046, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1047, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1048, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1049, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1050, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1051, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1052, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1053, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1054, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1055, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1056, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1057, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1058, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1059, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1060, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1061, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1062, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1063, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1064, @time := DATE_SUB(@time, INTERVAL 60 SECOND)); \ No newline at end of file diff --git a/app/src/main/resources/data_bak.sql b/app/src/main/resources/data_bak.sql new file mode 100644 index 0000000..67131d2 --- /dev/null +++ b/app/src/main/resources/data_bak.sql @@ -0,0 +1,953 @@ +INSERT INTO reply (post_id, content) +VALUES (1, 'This is a test comment 1.'), + (1, 'This is a test comment 2.'), + (1, 'This is a test comment 3.'), + (1, 'This is a test comment 4.'), + (1, 'This is a test comment 5.'), + (1, 'This is a test comment 6.'), + (1, 'This is a test comment 7.'), + (1, 'This is a test comment 8.'), + (1, 'This is a test comment 9.'), + (1, 'This is a test comment 10.'), + (1, 'This is a test comment 11.'), + (1, 'This is a test comment 12.'), + (1, 'This is a test comment 13.'), + (1, 'This is a test comment 14.'), + (1, 'This is a test comment 15.'), + (1, 'This is a test comment 16.'), + (1, 'This is a test comment 17.'), + (1, 'This is a test comment 18.'), + (1, 'This is a test comment 19.'), + (1, 'This is a test comment 20.'), + (1, 'This is a test comment 21.'), + (1, 'This is a test comment 22.'), + (1, 'This is a test comment 23.'), + (1, 'This is a test comment 24.'), + (1, 'This is a test comment 25.'), + (1, 'This is a test comment 26.'), + (1, 'This is a test comment 27.'), + (1, 'This is a test comment 28.'), + (1, 'This is a test comment 29.'), + (1, 'This is a test comment 30.'), + (1, 'This is a test comment 31.'), + (1, 'This is a test comment 32.'), + (1, 'This is a test comment 33.'), + (1, 'This is a test comment 34.'), + (1, 'This is a test comment 35.'), + (1, 'This is a test comment 36.'), + (1, 'This is a test comment 37.'), + (1, 'This is a test comment 38.'), + (1, 'This is a test comment 39.'), + (1, 'This is a test comment 40.'); + + +INSERT INTO post (title, content, author_email, author_name, author_picture) +VALUES ('Post 1', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 2', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 3', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 4', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 5', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 6', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 7', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 8', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 9', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 10', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 11', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 12', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 13', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 14', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 15', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 16', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 17', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 18', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 19', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 20', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 21', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 22', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 23', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 24', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 25', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 26', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 27', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 28', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 29', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 30', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 31', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 32', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 33', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 34', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 35', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 36', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 37', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 38', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 39', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 40', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 41', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 42', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 43', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 44', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 45', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 46', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 47', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 48', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 49', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 50', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 51', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 52', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 53', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 54', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 55', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 56', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 57', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 58', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 59', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 60', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 61', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 62', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 63', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 64', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 65', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 66', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 67', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 68', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 69', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 70', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 71', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 72', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 73', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 74', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 75', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 76', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 77', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 78', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 79', null, 'a@gmail.com', 'A', 'https://a.jpg'), + ('Post 80', null, 'a@gmail.com', 'A', 'https://a.jpg'); + +INSERT INTO guide (category, content, picture) +VALUES ('IRON', '고철로 배출', 'https://ik.imagekit.io/blisgo/guide/rhcjffb.webp'), + ('METAL', '금속캔으로 배출', 'https://ik.imagekit.io/blisgo/guide/rmathrzos.webp'), + ('BULKY', '대형폐기물로 배출', 'https://ik.imagekit.io/blisgo/guide/eogudvPrlanf.webp'), + ('STYROFOAM', '스티로폼으로 배출', 'https://ik.imagekit.io/blisgo/guide/qkfvhgkqtjdtnwl.webp'), + ('NON_FLAMMABLE', '불연성폐기물로 배출', 'https://ik.imagekit.io/blisgo/guide/qnfdustjd-whdfidwp.webp'), + ('VINYL', '비닐로 배출', 'https://ik.imagekit.io/blisgo/guide/qlslffb.webp'), + ('GLASS', '유리병류로 배출', 'https://ik.imagekit.io/blisgo/guide/dbflqud.webp'), + ('PROG', '음식물류 폐기물로 배출', 'https://ik.imagekit.io/blisgo/guide/dmatlranf.webp'), + ('CLOTHES', '의류 및 원단류로 배출', 'https://ik.imagekit.io/blisgo/guide/dmlfb.webp'), + ('ONLY_BOX', '전용수거함으로 배출', 'https://ik.imagekit.io/blisgo/guide/wjsdydgka.webp'), + ('PAPER', '종이류로 배출', 'https://ik.imagekit.io/blisgo/guide/whddl.webp'), + ('CARTON', '종이팩으로 배출', 'https://ik.imagekit.io/blisgo/guide/whddlvor-whddlzjq.webp'), + ('HOME_APPLIANCES', '폐가전제품으로 배출', 'https://ik.imagekit.io/blisgo/guide/vPrkwjswpvna.webp'), + ('PLASTIC', '플라스틱으로 배출', 'https://ik.imagekit.io/blisgo/guide/vmffktmxlr.webp'), + ('PAY_AS_YOU_GO_BAG', '종량제봉투로 배출', NULL), + ('SEPARATION_BY_MATERIAL', '재질에 맞게 배출', NULL), + ('CAUTION', '위험! 폐기시 주의가 필요함', NULL), + ('PRO_FACILITY', '전문처리시설로 배출', NULL); + + + +INSERT INTO waste (waste_id, name, type, picture, treatment) +VALUES (1001, '가격표', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1001.webp', NULL), + (1002, '가구류', '대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1002.webp', NULL), + (1003, '가발', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1003.webp', NULL), + (1004, '가습기', '폐가전제품', 'https://ik.imagekit.io/blisgo/dictionary/1004.webp', NULL), + (1005, '가위', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1005.webp', + '

다른 재질이 많이 섞인 제품은 분리해서 배출하며, 분리가 어렵다면 종량제봉투로 배출

'), + (1006, '개수대', '대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1006.webp', NULL), + (1007, '거울', '생활폐기물/대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1007.webp', + '

크기에 따라 해당 폐기물로 배출

'), + (1008, '걸레', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1008.webp', NULL), + (1009, '계란껍질', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1009.webp', NULL), + (1010, '고무장갑', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1010.webp', NULL), + (1011, '골판지', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1011.webp', + '

종이 < 일반 골판지
플라스틱 < PP 골판지

'), + (1012, '골프 클럽 백', '대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1012.webp', NULL), + (1013, '골프공', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1013.webp', NULL), + (1014, '공구류(철)', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1014.webp', + '

다른 재질이 많이 섞인 제품은 분리해서 배출하며, 분리가 어렵다면 종량제봉투로 배출

'), + (1015, '공기청정기', '폐가전제품', 'https://ik.imagekit.io/blisgo/dictionary/1015.webp', NULL), + (1016, '광고전단지', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1016.webp', + '

비닐코팅된 종이는 종량제봉투 배출

'), + (1017, '구두, 샌들, 슬리퍼', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1017.webp', + '

의류 및 원단류 배출 방법을 참고하여 배출하거나 종량제봉투로 배출

'), + (1018, '국자', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1018.webp', + '

고철 < 금속, 비금속 국자
플라스틱 < 플라스틱 국자
종량제봉투 < 나무 국자

'), + (1019, '그릇', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1019.webp', + '

불연성-종량제 < 도자기·유리그릇
고철 < 금속, 비금속그릇
플라스틱 < 플라스틱 그릇

'), + (1020, '기름(기계)', '대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1020.webp', NULL), + (1021, '기름(식용)', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1021.webp', + '

전용수거함으로 배출

'), + (1022, '기타(악기)', '대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1022.webp', NULL), + (1023, '깨진유리', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1023.webp', + '

불연성폐기물 배출방법을 참조하여 배출

'), + (1024, '나무젓가락', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1024.webp', NULL), + (1025, '나무조각, 나뭇가지, 나무줄기', '생활폐기물/대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1025.webp', + '

종량제봉투에 담을 수 없다면 대형폐기물로 처리

'), + (1026, '나사(못)', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1026.webp', NULL), + (1027, '나침반', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1027.webp', NULL), + (1028, '낙엽', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1028.webp', NULL), + (1029, '낚싯대', '대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1029.webp', NULL), + (1030, '난로(전기난로)', '폐가전제품/대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1030.webp', + '

대형폐기물 또는 가전제품으로 배출

'), + (1031, '낫', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1031.webp', + '

고철로 배출하되, 가능하다면 손잡이 부분(나무재질 등)을 분리하여 배출

'), + (1032, '내열식기류', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1032.webp', NULL), + (1033, '냄비뚜껑(강화유리)', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1033.webp', NULL), + (1034, '냉장고(냉동고)', '폐가전제품', 'https://ik.imagekit.io/blisgo/dictionary/1034.webp', NULL), + (1035, '노트북', '폐가전제품', 'https://ik.imagekit.io/blisgo/dictionary/1035.webp', NULL), + (1036, '농약용기', '기타폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1036.webp', + '

내용물을 다 사용한 후 따로 봉투에 담아 배출

'), + (1037, '다리미', '폐가전제품', 'https://ik.imagekit.io/blisgo/dictionary/1037.webp', NULL), + (1038, '도끼', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1038.webp', + '

고철로 배출하되, 가능하다면 손잡이 부분(나무재질 등)을 분리하여 배출

'), + (1039, '도마', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1039.webp', + '

종량제봉투 < 나무도마
플라스틱 < 플라스틱 도마

'), + (1040, '도자기류', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1040.webp', NULL), + (1041, '돋보기', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1041.webp', NULL), + (1042, '디지털카메라', '폐가전제품', 'https://ik.imagekit.io/blisgo/dictionary/1042.webp', NULL), + (1043, '뚝배기', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1043.webp', NULL), + (1044, '라디오', '폐가전제품', 'https://ik.imagekit.io/blisgo/dictionary/1044.webp', NULL), + (1045, '라이터(일회용)', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1045.webp', + '

모두 사용한 후 종량제봉투로 배출

'), + (1046, '라켓(배드민턴, 테니스 등)', '생활폐기물/대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1046.webp', + '

종량제봉투에 담을 수 없다면 대형폐기물로 처리

'), + (1047, '랩(사용 후)', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1047.webp', + '

사용한 랩은 종량제봉투로 배출

'), + (1048, '랩의 심', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1048.webp', NULL), + (1049, '런닝머신', '폐가전제품', 'https://ik.imagekit.io/blisgo/dictionary/1049.webp', NULL), + (1050, '리코더(플라스틱)', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1050.webp', NULL), + (1051, '마스크', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1051.webp', NULL), + (1052, '마우스패드', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1052.webp', NULL), + (1053, '마커펜, 만년필', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1053.webp', NULL), + (1054, '매트, 매트리스', '대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1054.webp', NULL), + (1055, '맥주병뚜껑(철, 알루미늄)', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1055.webp', NULL), + (1056, '머그컵(도자기류)', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1056.webp', NULL), + (1057, '머플러(목도리)', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1057.webp', + '

의류 및 원단류 배출 방법을 참고하여 배출

'), + (1058, '메가폰(플라스틱)', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1058.webp', NULL), + (1059, '면도기(일회용)', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1059.webp', NULL), + (1060, '면도칼', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1060.webp', + '

수거원이 다치지 않도록 종이 등으로 감싸서 종량제봉투로 배출

'), + (1061, '면봉', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1061.webp', NULL), + (1062, '명함', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1062.webp', + '

종이류로 배출하며, 플라스틱 합성지 등 다른 재질 포함시 종량제봉투에 배출

'), + (1063, '명함지갑', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1063.webp', NULL), + (1064, '모니터(컴퓨터 TV)', '폐가전제품', 'https://ik.imagekit.io/blisgo/dictionary/1064.webp', NULL), + (1065, '모자(의류)', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1065.webp', + '

의류 및 원단류 배출 방법을 참고하여 배출하거나 종량제봉투로 배출

'), + (1066, '목발', '생활폐기물/대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1066.webp', + '

대형폐기물 또는 고철 등 재질에 맞게 배출

'), + (1067, '목재', '생활폐기물/대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1067.webp', + '

종량제봉투에 담을 수 없다면 대형폐기물로 처리

'), + (1068, '문갑, 문짝', '대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1068.webp', NULL), + (1069, '물티슈', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1069.webp', NULL), + (1070, '밀짚모자', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1070.webp', NULL), + (1071, '바나나껍질', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1071.webp', NULL), + (1072, '바둑판', '생활폐기물/대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1072.webp', + '

종량제봉투에 담을 수 없는 경우 대형폐기물로 처리

'), + (1073, '바베큐그릴', '대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1073.webp', NULL), + (1074, '밥상', '대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1074.webp', NULL), + (1075, '방석', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1075.webp', NULL), + (1076, '백과사전, 사전', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1076.webp', NULL), + (1077, '백열전구', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1077.webp', NULL), + (1078, '벼루', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1078.webp', NULL), + (1079, '벽돌', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1079.webp', NULL), + (1080, '벽시계', '대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1080.webp', NULL), + (1081, '보온병', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1081.webp', NULL), + (1082, '복사기', '폐가전제품', 'https://ik.imagekit.io/blisgo/dictionary/1082.webp', NULL), + (1083, '볼펜', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1083.webp', NULL), + (1084, '볼풀공', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1084.webp', NULL), + (1085, '분무기(플라스틱)', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1085.webp', NULL), + (1086, '분유 깡통', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1086.webp', NULL), + (1087, '붓', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1087.webp', NULL), + (1088, '블라인드', '대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1088.webp', NULL), + (1089, '비닐봉지(일회용)', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1089.webp', NULL), + (1090, '비닐장판', '생활폐기물/대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1090.webp', + '

종량제봉투에 담을 수 없는 경우 대형폐기물로 처리

'), + (1091, '비닐코팅종이', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1091.webp', NULL), + (1092, '비디오카메라(캠코더)', '폐가전제품', 'https://ik.imagekit.io/blisgo/dictionary/1092.webp', NULL), + (1093, '비디오테이프', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1093.webp', + '

내부 필름은 분리하여 종량제봉투로 배출

'), + (1094, '빗, 헤어브러시', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1094.webp', + '

재질에 맞게 배출하되 나무 빗 등은 종량제봉투로 배출

'), + (1095, '빨대', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1095.webp', NULL), + (1096, '사다리', '생활폐기물/대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1096.webp', + '

대형폐기물 또는 고철로 배출

'), + (1097, '사인펜', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1097.webp', NULL), + (1098, '사진', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1098.webp', NULL), + (1099, '사진인화지', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1099.webp', NULL), + (1100, '삽', '생활폐기물/대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1100.webp', + '

대형폐기물 또는 재질에 맞게 배출

'), + (1101, '상한 음식', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1101.webp', NULL), + (1102, '생선(먹고 남은)', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1102.webp', + '

생선뼈는 종량제봉투에 버리고, 나머지는 음식물로 배출

'), + (1103, '샤프펜슬', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1103.webp', NULL), + (1104, '샴푸용기', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1104.webp', + '

내부를 헹구고 플라스틱으로 배출

'), + (1105, '서랍장', '대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1105.webp', NULL), + (1106, '서류봉투(갈색 종이)', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1106.webp', NULL), + (1107, '선풍기', '폐가전제품', 'https://ik.imagekit.io/blisgo/dictionary/1107.webp', NULL), + (1108, '성냥', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1108.webp', + '

물에 적신 후 종량제봉투로 배출

'), + (1109, '세면대', '대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1109.webp', NULL), + (1110, '세탁기', '폐가전제품', 'https://ik.imagekit.io/blisgo/dictionary/1110.webp', NULL), + (1111, '셔틀콕(배드민턴공, 깃털공)', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1111.webp', NULL), + (1112, '소스용기', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1112.webp', + '

내부를 헹구고 플라스틱 또는 재질에 맞게 배출

'), + (1113, '손목 시계', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1113.webp', + '

종량제종투에 담을 수 없는 경우 대형폐기물로 처리, 건전지는 분리하여 전용수거함으로 배출

'), + (1114, '솜', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1114.webp', NULL), + (1115, '솜이불', '대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1115.webp', NULL), + (1116, '송곳', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1116.webp', NULL), + (1117, '수세미', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1117.webp', NULL), + (1118, '수조, 수족관', '대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1118.webp', NULL), + (1119, '수첩', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1119.webp', + '

종이류 또는 재질에 맞게 배출

'), + (1120, '숯', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1120.webp', NULL), + (1121, '스노우보드', '대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1121.webp', NULL), + (1122, '스캐너', '폐가전제품', 'https://ik.imagekit.io/blisgo/dictionary/1122.webp', NULL), + (1123, '스케이트보드', '대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1123.webp', NULL), + (1124, '스키용구류', '대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1124.webp', NULL), + (1125, '스탠드', '폐가전제품', 'https://ik.imagekit.io/blisgo/dictionary/1125.webp', NULL), + (1126, '스폰지', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1126.webp', NULL), + (1127, '스프레이, 부탄가스', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1127.webp', '

금속캔(부탄가스통) 배출방법 참고

'), + (1128, '스피커', '폐가전제품', 'https://ik.imagekit.io/blisgo/dictionary/1128.webp', NULL), + (1129, '식기세척기(식기건조기)', '폐가전제품', 'https://ik.imagekit.io/blisgo/dictionary/1129.webp', NULL), + (1130, '식물, 나무', '생활폐기물/대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1130.webp', + '

종량제봉투에 담을 수 없는 경우 대형폐기물로 처리

'), + (1131, '식용유용기(플라스틱)', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1131.webp', + '

모두 사용 후 플라스틱으로 배출

'), + (1132, '신문지', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1132.webp', NULL), + (1133, '신발', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1133.webp', NULL), + (1134, '신발장', '대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1134.webp', NULL), + (1135, '싱크대', '대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1135.webp', NULL), + (1136, '쌀통', '대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1136.webp', NULL), + (1137, '쌀포대', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1137.webp', + '

종이류 또는 재질에 맞게 배출

'), + (1138, '쓰레받기', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1138.webp', + '

플라스틱 < 가정용 플라스틱 쓰레받기
고철 < 고철 쓰레받기

'), + (1139, '아기욕조, 아기침대', '생활폐기물/대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1139.webp', NULL), + (1140, '아령', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1140.webp', + '

고철 또는 재질에 맞게 배출

'), + (1141, '아이스팩', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1141.webp', NULL), + (1142, '악기', '생활폐기물/대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1142.webp', + '

종량제봉투에 담을 수 없는 경우 대형페기물로 배출
※악기는 폐가전 제품 무상방문 수거 대상품목이 아님

'), + (1143, '압력솓', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1143.webp', NULL), + (1144, '애완동물 용변 시트', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1144.webp', NULL), + (1145, '애완동물 음식캔', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1145.webp', + '

금속캔으로 배출

'), + (1146, '애완동물집, 운반케이스', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1146.webp', NULL), + (1147, '액자', '생활폐기물/대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1147.webp', + '

종량제봉투에 담을 수 없는 경우 대형폐기물로 처리

'), + (1148, '앨범', '생활폐기물/대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1148.webp', + '

종량제봉투에 담을 수 없는 경우 대형폐기물로 처리

'), + (1149, '야구공', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1149.webp', NULL), + (1150, '야구글러브', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1150.webp', NULL), + (1151, '야구배트', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1151.webp', + '

재질에 맞게 배출 또는 종량제봉투로 배출

'), + (1152, '약 종류', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1152.webp', + '

약국, 보건소 등의 전용수거함으로 배출

'), + (1153, '양초', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1153.webp', NULL), + (1154, '에어매트', '생활폐기물/대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1154.webp', + '

종량제봉투에 담을 수 없는 경우 대형폐기물로 처리

'), + (1155, '에어컨', '폐가전제품', 'https://ik.imagekit.io/blisgo/dictionary/1155.webp', NULL), + (1156, '엔진오일', '기타폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1156.webp', + '

전문처리시설(카센터 등)로 배출

'), + (1157, '여행가방(트렁크)', '대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1157.webp', NULL), + (1158, '역기', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1158.webp', NULL), + (1159, '연필, 색연필', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1159.webp', NULL), + (1160, '연필깎이', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1160.webp', NULL), + (1161, '오디오세트', '폐가전제품', 'https://ik.imagekit.io/blisgo/dictionary/1161.webp', NULL), + (1162, '오렌지껍질', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1162.webp', NULL), + (1163, '온풍기', '폐가전제품', 'https://ik.imagekit.io/blisgo/dictionary/1163.webp', NULL), + (1164, '옷걸이(세탁소 흰색 철사)', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1164.webp', NULL), + (1165, '와이퍼', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1165.webp', NULL), + (1166, '와인셀러', '폐가전제품', 'https://ik.imagekit.io/blisgo/dictionary/1166.webp', NULL), + (1167, '완충재(뽁뽁이)', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1167.webp', NULL), + (1168, '요가매트', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1168.webp', NULL), + (1169, '우산', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1169.webp', + '

뼈대와 비닐을 분리하여, 각각의 분리수거함으로 배출, 분리가 어렵다면 종량제봉투로 배출

'), + (1170, '유리병', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1170.webp', '

유리병류로 배출

'), + (1171, '유리병뚜껑(철, 알루미늄)', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1171.webp', NULL), + (1172, '유리판, 유리제품', '생활폐기물/대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1172.webp', + '

불연성폐기물 또는 대형폐기물로 배출

'), + (1173, '유모차', '대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1173.webp', NULL), + (1174, '윤활유', '기타폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1174.webp', '

구입처와 상담 후 배출

'), + (1175, '응접세트', '대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1175.webp', NULL), + (1176, '의류', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1176.webp', + '

의류 및 원단류로 배출

'), + (1177, '의류건조대', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1177.webp', + '

고철, 플라스틱재질에 맞게 배출

'), + (1178, '의자', '대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1178.webp', NULL), + (1179, '이불', '생활폐기물/대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1179.webp', + '

종량제종투에 담을 수 없는 경우 대형폐기물로 배출

'), + (1180, '인형류', '생활폐기물/대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1180.webp', + '

종량제종투에 담을 수 없는 경우 대형폐기물로 배출

'), + (1181, '자동차 부품', '기타폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1181.webp', '

중고센터, 판매처 등과 상담하여 처리

'), + (1182, '자루걸레', '대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1182.webp', NULL), + (1183, '자석', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1183.webp', NULL), + (1184, '자전거', '기타폐기물/대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1184.webp', + '

대형폐기물로 처리하거나, 중고센터 등과 상담하여 처리

'), + (1185, '잡지', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1185.webp', NULL), + (1186, '장난감류', '생활폐기물/대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1186.webp', + '

크기에 따라 대형폐기물 또는 재질에 맞게 배출 (여러재질이 섞인 경우 종량제봉투로 배출)

'), + (1187, '장롱', '대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1187.webp', NULL), + (1188, '장식장', '대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1188.webp', NULL), + (1189, '장판', '대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1189.webp', NULL), + (1190, '재떨이', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1190.webp', + '

불연성-종량제 < 도자기·유리재떨이
고철 < 금속류 재떨이

'), + (1191, '전기밥솔', '폐가전제품', 'https://ik.imagekit.io/blisgo/dictionary/1191.webp', NULL), + (1192, '전기비데', '폐가전제품', 'https://ik.imagekit.io/blisgo/dictionary/1192.webp', NULL), + (1193, '전기오븐레인지', '폐가전제품', 'https://ik.imagekit.io/blisgo/dictionary/1193.webp', NULL), + (1194, '전기코드류', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1194.webp', NULL), + (1195, '전기포트', '폐가전제품', 'https://ik.imagekit.io/blisgo/dictionary/1195.webp', NULL), + (1196, '전단지', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1196.webp', NULL), + (1197, '전동칫솔', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1197.webp', NULL), + (1198, '전자레인지', '폐가전제품', 'https://ik.imagekit.io/blisgo/dictionary/1198.webp', NULL), + (1199, '전자사전(전자수첩)', '폐가전제품', 'https://ik.imagekit.io/blisgo/dictionary/1199.webp', NULL), + (1200, '전자피아노', '생활폐기물/대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1200.webp', + '

종량제봉투에 담을 수 없는 경우 대형폐기물로 처리
※악기는 폐가전 제품 무상방문 수거 대상품목이 아님

'), + (1201, '전지', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1201.webp', + '

전용수거함으로 배출

'), + (1202, '전축', '폐가전제품', 'https://ik.imagekit.io/blisgo/dictionary/1202.webp', NULL), + (1203, '전화기(팩스포함)', '폐가전제품', 'https://ik.imagekit.io/blisgo/dictionary/1203.webp', NULL), + (1204, '전화번호부', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1204.webp', NULL), + (1205, '접착제(본드 등)', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1205.webp', NULL), + (1206, '정기장판', '대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1206.webp', + '

대형폐기물로 배출 (전기이불담요 포함)

'), + (1207, '정수기', '폐가전제품', 'https://ik.imagekit.io/blisgo/dictionary/1207.webp', + '

대형가전으로 배출

'), + (1208, '젖꼭지(아기용품)', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1208.webp', NULL), + (1209, '젖병(아기용품)', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1209.webp', + '

젖병의 몸체와 윗부분의 젖꼭지는 분리하여 재질에 맞게 배출

'), + (1210, '조각칼', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1210.webp', + '

수거원이 다치지 않도록 종이 등으로 감싸서 종량제봉투로 배출

'), + (1211, '종이기저귀', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1211.webp', NULL), + (1212, '종이상자', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1212.webp', NULL), + (1213, '종이심', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1213.webp', NULL), + (1214, '종이조각', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1214.webp', NULL), + (1215, '종이팩(우유팩 등)', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1215.webp', + '

내부에 알루미늄박이 붙어 있다면 종량제봉투로 배출

'), + (1216, '주전자(철, 알루미늄)', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1216.webp', + '

플라스틱 뚜껑 등은 돌려서 제거한 후 고철로 배출

'), + (1217, '줄자', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1217.webp', + '

재질에 맞게 배출 또는 종량제봉투로 배출

'), + (1218, '지우개', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1218.webp', NULL), + (1219, '진열대', '생활폐기물/대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1219.webp', NULL), + (1220, '차 찌꺼기', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1220.webp', NULL), + (1221, '찬장', '대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1221.webp', NULL), + (1222, '찻잔(도자기류)', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1222.webp', NULL), + (1223, '책', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1223.webp', NULL), + (1224, '책상, 책장', '대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1224.webp', NULL), + (1225, '천체망원경', '대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1225.webp', NULL), + (1226, '철사', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1226.webp', NULL), + (1227, '철판(가정요리용)', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1227.webp', NULL), + (1228, '청소기', '폐가전제품', 'https://ik.imagekit.io/blisgo/dictionary/1228.webp', NULL), + (1229, '체온계(건전지, 디지털)', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1229.webp', + '

건전지는 분리하여 전용수거함으로 배출

'), + (1230, '체중계', '생활폐기물/대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1230.webp', + '

종량제종투에 담을 수 없는 경우 대형폐기물로 배출

'), + (1231, '축구공', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1231.webp', NULL), + (1232, '충전식전지', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1232.webp', + '

전용수거함으로 배출

'), + (1233, '치약용기', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1233.webp', + '

플라스틱 또는 재질에 맞게 배출

'), + (1234, '치킨박스', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1234.webp', + '

기름에 오염된 내부 종이는 종량제봉투로 배출

'), + (1235, '침구류(이불, 베개 등)', '생활폐기물/대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1235.webp', + '

종량제종투에 담을 수 없는 경우 대형폐기물로 배출

'), + (1236, '침대', '대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1236.webp', NULL), + (1237, '칫솔', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1237.webp', NULL), + (1238, '카펫, 융단', '생활폐기물/대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1238.webp', + '

종량제종투에 담을 수 없는 경우 대형폐기물로 배출

'), + (1239, '캐비넷', '대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1239.webp', NULL), + (1240, '캔 따개', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1240.webp', NULL), + (1241, '캡(플라스틱 뚜껑)', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1241.webp', NULL), + (1242, '커튼, 커튼 레일', '대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1242.webp', + '

종량제종투에 담을 수 없는 경우 대형폐기물로 배출

'), + (1243, '커피메이커', '폐가전제품', 'https://ik.imagekit.io/blisgo/dictionary/1243.webp', NULL), + (1244, '커피원두, 찌꺼기', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1244.webp', NULL), + (1245, '컴퓨터', '폐가전제품', 'https://ik.imagekit.io/blisgo/dictionary/1245.webp', NULL), + (1246, '컵', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1246.webp', + '

불연성-종량제 < 도자기·유리 컵
고철 < 금속·비금속 컵
플라스틱 < 플라스틱컵

'), + (1247, '코르크따개(와인따개)', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1247.webp', + '

수거원이 다치지 않도록 종이 등으로 감싸서 종량제봉투로 배출
재질에 맞게 해당 분리수거함으로 배출

'), + (1248, '코르크마개', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1248.webp', NULL), + (1249, '코팅된 종이', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1249.webp', NULL), + (1250, '콘센트', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1250.webp', NULL), + (1251, '콘텍트렌즈', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1251.webp', NULL), + (1252, '쿠션', '생활폐기물/대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1252.webp', + '

종량제종투에 담을 수 없는 경우 대형폐기물로 배출

'), + (1253, '크레용', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1253.webp', NULL), + (1254, '키보드(컴퓨터용)', '폐가전제품', 'https://ik.imagekit.io/blisgo/dictionary/1254.webp', NULL), + (1255, '타이어', '기타폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1255.webp', '

구입처와 상담 후 배출

'), + (1256, '탁상달력', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1256.webp', + '

종이류 배출방법을 참고하여 배출

'), + (1257, '탈수기', '폐가전제품', 'https://ik.imagekit.io/blisgo/dictionary/1257.webp', NULL), + (1258, '텐트', '생활폐기물/대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1258.webp', + '

종량제종투에 담을 수 없는 경우 대형폐기물로 배출

'), + (1259, '텔레비전(TV)', '폐가전제품', 'https://ik.imagekit.io/blisgo/dictionary/1259.webp', NULL), + (1260, '토스터기', '폐가전제품', 'https://ik.imagekit.io/blisgo/dictionary/1260.webp', NULL), + (1261, '톱', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1261.webp', NULL), + (1262, '튀김기름', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1262.webp', + '

폐식용유 전용수거함 배출

'), + (1263, '틀니', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1263.webp', NULL), + (1264, '티백(녹차)', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1264.webp', NULL), + (1265, '파인애플껍질', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1265.webp', NULL), + (1266, '팩스(복합기)', '폐가전제품', 'https://ik.imagekit.io/blisgo/dictionary/1266.webp', NULL), + (1267, '페트병', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1267.webp', NULL), + (1268, '포스터, 포장지', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1268.webp', + '

종이류 배출방법을 참고하여 배출

'), + (1269, '프린터', '폐가전제품', 'https://ik.imagekit.io/blisgo/dictionary/1269.webp', NULL), + (1270, '피아노', '기타폐기물/대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1270.webp', + '

대형폐기물로 처리하거나, 중고센터등과 상담하여 처리

'), + (1271, '피자 세이버(피자 삼발이)', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1271.webp', NULL), + (1272, '피자박스', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1272.webp', + '

기름에 오염된 내부 종이는 종량제봉투로 배출

'), + (1273, '필름(사진용)', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1273.webp', NULL), + (1274, '핫팩', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1274.webp', NULL), + (1275, '항아리', '대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1275.webp', + '

대형폐기물로 처리

'), + (1276, '헝겁류', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1276.webp', NULL), + (1277, '헤드폰(헤드셋)', '폐가전제품', 'https://ik.imagekit.io/blisgo/dictionary/1277.webp', NULL), + (1278, '헬멧', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1278.webp', + '

종량제봉투로 배출하되, 분리하여 재질에 맞게 배출

'), + (1279, '형광등', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1279.webp', + '

전용수거함으로 배출

'), + (1280, '호일(사용 후)', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1280.webp', NULL), + (1281, '화로', '대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1281.webp', NULL), + (1282, '화분, 화병', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1282.webp', + '

불연성폐기물로 배출 등 재질에 맞게 배출

'), + (1283, '화장대', '대형폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1283.webp', NULL), + (1284, '화장품냉장고', '폐가전제품', 'https://ik.imagekit.io/blisgo/dictionary/1284.webp', NULL), + (1285, '후라이팬', '생활폐기물', 'https://ik.imagekit.io/blisgo/dictionary/1285.webp', NULL), + (1286, '휴대용 플레이어(MP3등)', '폐가전제품', 'https://ik.imagekit.io/blisgo/dictionary/1286.webp', NULL), + (1287, '휴대전화', '폐가전제품', 'https://ik.imagekit.io/blisgo/dictionary/1287.webp', + '

폐가전제품으로 배출
※우체국 보상판매 이용 가능

'); + +INSERT INTO waste_categories (categories, waste_id) +VALUES ('PAPER', 1001), + ('BULKY', 1002), + ('PAY_AS_YOU_GO_BAG', 1003), + ('HOME_APPLIANCES', 1004), + ('PAY_AS_YOU_GO_BAG', 1005), + ('SEPARATION_BY_MATERIAL', 1005), + ('BULKY', 1006), + ('NON_FLAMMABLE', 1007), + ('BULKY', 1007), + ('PAY_AS_YOU_GO_BAG', 1008), + ('PAY_AS_YOU_GO_BAG', 1009), + ('PAY_AS_YOU_GO_BAG', 1010), + ('PAPER', 1011), + ('PLASTIC', 1011), + ('BULKY', 1012), + ('PAY_AS_YOU_GO_BAG', 1013), + ('IRON', 1014), + ('HOME_APPLIANCES', 1015), + ('PAPER', 1016), + ('CLOTHES', 1017), + ('PAY_AS_YOU_GO_BAG', 1017), + ('IRON', 1018), + ('PLASTIC', 1018), + ('PAY_AS_YOU_GO_BAG', 1018), + ('NON_FLAMMABLE', 1019), + ('IRON', 1019), + ('PLASTIC', 1019), + ('PRO_FACILITY', 1020), + ('ONLY_BOX', 1021), + ('BULKY', 1022), + ('NON_FLAMMABLE', 1023), + ('PAY_AS_YOU_GO_BAG', 1024), + ('PAY_AS_YOU_GO_BAG', 1025), + ('BULKY', 1025), + ('IRON', 1026), + ('PAY_AS_YOU_GO_BAG', 1027), + ('PAY_AS_YOU_GO_BAG', 1028), + ('BULKY', 1029), + ('HOME_APPLIANCES', 1030), + ('BULKY', 1030), + ('IRON', 1031), + ('PAY_AS_YOU_GO_BAG', 1031), + ('NON_FLAMMABLE', 1032), + ('PAY_AS_YOU_GO_BAG', 1033), + ('HOME_APPLIANCES', 1034), + ('HOME_APPLIANCES', 1035), + ('CAUTION', 1036), + ('HOME_APPLIANCES', 1037), + ('IRON', 1038), + ('PAY_AS_YOU_GO_BAG', 1038), + ('PAY_AS_YOU_GO_BAG', 1039), + ('PLASTIC', 1039), + ('NON_FLAMMABLE', 1040), + ('PAY_AS_YOU_GO_BAG', 1041), + ('HOME_APPLIANCES', 1042), + ('NON_FLAMMABLE', 1043), + ('HOME_APPLIANCES', 1044), + ('PAY_AS_YOU_GO_BAG', 1045), + ('CAUTION', 1045), + ('PAY_AS_YOU_GO_BAG', 1046), + ('BULKY', 1046), + ('PAY_AS_YOU_GO_BAG', 1047), + ('PAPER', 1048), + ('HOME_APPLIANCES', 1049), + ('PLASTIC', 1050), + ('PAY_AS_YOU_GO_BAG', 1051), + ('PAY_AS_YOU_GO_BAG', 1052), + ('PAY_AS_YOU_GO_BAG', 1053), + ('BULKY', 1054), + ('IRON', 1055), + ('NON_FLAMMABLE', 1056), + ('CLOTHES', 1057), + ('PLASTIC', 1058), + ('PAY_AS_YOU_GO_BAG', 1059), + ('PAY_AS_YOU_GO_BAG', 1060), + ('CAUTION', 1060), + ('PAY_AS_YOU_GO_BAG', 1061), + ('PAPER', 1062), + ('PAY_AS_YOU_GO_BAG', 1062), + ('PAY_AS_YOU_GO_BAG', 1063), + ('HOME_APPLIANCES', 1064), + ('CLOTHES', 1065), + ('PAY_AS_YOU_GO_BAG', 1065), + ('IRON', 1066), + ('SEPARATION_BY_MATERIAL', 1066), + ('BULKY', 1066), + ('PAY_AS_YOU_GO_BAG', 1067), + ('BULKY', 1067), + ('BULKY', 1068), + ('PAY_AS_YOU_GO_BAG', 1069), + ('PAY_AS_YOU_GO_BAG', 1070), + ('PROG', 1071), + ('PAY_AS_YOU_GO_BAG', 1072), + ('BULKY', 1072), + ('BULKY', 1073), + ('BULKY', 1074), + ('PAY_AS_YOU_GO_BAG', 1075), + ('PAPER', 1076), + ('NON_FLAMMABLE', 1077), + ('PAY_AS_YOU_GO_BAG', 1078), + ('NON_FLAMMABLE', 1079), + ('BULKY', 1080), + ('PAY_AS_YOU_GO_BAG', 1081), + ('HOME_APPLIANCES', 1082), + ('PAY_AS_YOU_GO_BAG', 1083), + ('PLASTIC', 1084), + ('PLASTIC', 1085), + ('IRON', 1086), + ('PAY_AS_YOU_GO_BAG', 1087), + ('BULKY', 1088), + ('VINYL', 1089), + ('PAY_AS_YOU_GO_BAG', 1090), + ('BULKY', 1090), + ('PAY_AS_YOU_GO_BAG', 1091), + ('HOME_APPLIANCES', 1092), + ('PLASTIC', 1093), + ('SEPARATION_BY_MATERIAL', 1094), + ('PAY_AS_YOU_GO_BAG', 1094), + ('PLASTIC', 1095), + ('IRON', 1096), + ('BULKY', 1096), + ('PAY_AS_YOU_GO_BAG', 1097), + ('PAY_AS_YOU_GO_BAG', 1098), + ('PAY_AS_YOU_GO_BAG', 1099), + ('SEPARATION_BY_MATERIAL', 1100), + ('BULKY', 1100), + ('PROG', 1101), + ('PROG', 1102), + ('PAY_AS_YOU_GO_BAG', 1102), + ('PAY_AS_YOU_GO_BAG', 1103), + ('PLASTIC', 1104), + ('BULKY', 1105), + ('PAPER', 1106), + ('HOME_APPLIANCES', 1107), + ('PAY_AS_YOU_GO_BAG', 1108), + ('BULKY', 1109), + ('HOME_APPLIANCES', 1110), + ('PAY_AS_YOU_GO_BAG', 1111), + ('PLASTIC', 1112), + ('SEPARATION_BY_MATERIAL', 1112), + ('PAY_AS_YOU_GO_BAG', 1113), + ('PAY_AS_YOU_GO_BAG', 1114), + ('BULKY', 1115), + ('PAY_AS_YOU_GO_BAG', 1116), + ('PAY_AS_YOU_GO_BAG', 1117), + ('BULKY', 1118), + ('PAPER', 1119), + ('SEPARATION_BY_MATERIAL', 1119), + ('PAY_AS_YOU_GO_BAG', 1120), + ('BULKY', 1121), + ('HOME_APPLIANCES', 1122), + ('BULKY', 1123), + ('BULKY', 1124), + ('HOME_APPLIANCES', 1125), + ('PAY_AS_YOU_GO_BAG', 1126), + ('METAL', 1127), + ('CAUTION', 1127), + ('HOME_APPLIANCES', 1128), + ('HOME_APPLIANCES', 1129), + ('PAY_AS_YOU_GO_BAG', 1130), + ('BULKY', 1130), + ('PLASTIC', 1131), + ('PAPER', 1132), + ('PAY_AS_YOU_GO_BAG', 1133), + ('BULKY', 1134), + ('BULKY', 1135), + ('BULKY', 1136), + ('PAPER', 1137), + ('SEPARATION_BY_MATERIAL', 1137), + ('PLASTIC', 1138), + ('IRON', 1138), + ('SEPARATION_BY_MATERIAL', 1139), + ('BULKY', 1139), + ('IRON', 1140), + ('SEPARATION_BY_MATERIAL', 1140), + ('PAY_AS_YOU_GO_BAG', 1141), + ('PAY_AS_YOU_GO_BAG', 1142), + ('BULKY', 1142), + ('IRON', 1143), + ('PAY_AS_YOU_GO_BAG', 1144), + ('METAL', 1145), + ('CAUTION', 1145), + ('SEPARATION_BY_MATERIAL', 1146), + ('PAY_AS_YOU_GO_BAG', 1147), + ('BULKY', 1147), + ('PAY_AS_YOU_GO_BAG', 1148), + ('BULKY', 1148), + ('PAY_AS_YOU_GO_BAG', 1149), + ('PAY_AS_YOU_GO_BAG', 1150), + ('SEPARATION_BY_MATERIAL', 1151), + ('PAY_AS_YOU_GO_BAG', 1151), + ('ONLY_BOX', 1152), + ('PAY_AS_YOU_GO_BAG', 1153), + ('PAY_AS_YOU_GO_BAG', 1154), + ('BULKY', 1154), + ('HOME_APPLIANCES', 1155), + ('PRO_FACILITY', 1156), + ('BULKY', 1157), + ('IRON', 1158), + ('PAY_AS_YOU_GO_BAG', 1159), + ('PAY_AS_YOU_GO_BAG', 1160), + ('HOME_APPLIANCES', 1161), + ('PROG', 1162), + ('HOME_APPLIANCES', 1163), + ('IRON', 1164), + ('SEPARATION_BY_MATERIAL', 1165), + ('HOME_APPLIANCES', 1166), + ('VINYL', 1167), + ('PAY_AS_YOU_GO_BAG', 1168), + ('PAY_AS_YOU_GO_BAG', 1169), + ('GLASS', 1170), + ('CAUTION', 1170), + ('IRON', 1171), + ('NON_FLAMMABLE', 1172), + ('BULKY', 1172), + ('BULKY', 1173), + ('PRO_FACILITY', 1174), + ('BULKY', 1175), + ('CLOTHES', 1176), + ('IRON', 1177), + ('PLASTIC', 1177), + ('SEPARATION_BY_MATERIAL', 1177), + ('BULKY', 1178), + ('PAY_AS_YOU_GO_BAG', 1179), + ('BULKY', 1179), + ('PAY_AS_YOU_GO_BAG', 1180), + ('BULKY', 1180), + ('PRO_FACILITY', 1181), + ('BULKY', 1182), + ('PAY_AS_YOU_GO_BAG', 1183), + ('PRO_FACILITY', 1184), + ('BULKY', 1184), + ('PAPER', 1185), + ('SEPARATION_BY_MATERIAL', 1186), + ('PAY_AS_YOU_GO_BAG', 1186), + ('BULKY', 1186), + ('BULKY', 1187), + ('BULKY', 1188), + ('BULKY', 1189), + ('NON_FLAMMABLE', 1190), + ('IRON', 1190), + ('HOME_APPLIANCES', 1191), + ('HOME_APPLIANCES', 1192), + ('HOME_APPLIANCES', 1193), + ('PAY_AS_YOU_GO_BAG', 1194), + ('HOME_APPLIANCES', 1195), + ('PAPER', 1196), + ('PAY_AS_YOU_GO_BAG', 1197), + ('HOME_APPLIANCES', 1198), + ('HOME_APPLIANCES', 1199), + ('PAY_AS_YOU_GO_BAG', 1200), + ('BULKY', 1200), + ('ONLY_BOX', 1201), + ('HOME_APPLIANCES', 1202), + ('HOME_APPLIANCES', 1203), + ('PAPER', 1204), + ('PAY_AS_YOU_GO_BAG', 1205), + ('BULKY', 1206), + ('HOME_APPLIANCES', 1207), + ('PAY_AS_YOU_GO_BAG', 1208), + ('PLASTIC', 1209), + ('SEPARATION_BY_MATERIAL', 1209), + ('PAY_AS_YOU_GO_BAG', 1210), + ('PAY_AS_YOU_GO_BAG', 1211), + ('PAPER', 1212), + ('PAPER', 1213), + ('PAPER', 1214), + ('CARTON', 1215), + ('IRON', 1216), + ('SEPARATION_BY_MATERIAL', 1217), + ('PAY_AS_YOU_GO_BAG', 1217), + ('PAY_AS_YOU_GO_BAG', 1218), + ('SEPARATION_BY_MATERIAL', 1219), + ('BULKY', 1219), + ('PAY_AS_YOU_GO_BAG', 1220), + ('BULKY', 1221), + ('NON_FLAMMABLE', 1222), + ('PAPER', 1223), + ('BULKY', 1224), + ('BULKY', 1225), + ('IRON', 1226), + ('IRON', 1227), + ('HOME_APPLIANCES', 1228), + ('PAY_AS_YOU_GO_BAG', 1229), + ('PAY_AS_YOU_GO_BAG', 1230), + ('BULKY', 1230), + ('PAY_AS_YOU_GO_BAG', 1231), + ('ONLY_BOX', 1232), + ('PLASTIC', 1233), + ('SEPARATION_BY_MATERIAL', 1233), + ('PAPER', 1234), + ('PAY_AS_YOU_GO_BAG', 1235), + ('BULKY', 1235), + ('BULKY', 1236), + ('PAY_AS_YOU_GO_BAG', 1237), + ('PAY_AS_YOU_GO_BAG', 1238), + ('BULKY', 1238), + ('BULKY', 1239), + ('IRON', 1240), + ('PLASTIC', 1241), + ('PAY_AS_YOU_GO_BAG', 1242), + ('BULKY', 1242), + ('HOME_APPLIANCES', 1243), + ('PAY_AS_YOU_GO_BAG', 1244), + ('HOME_APPLIANCES', 1245), + ('NON_FLAMMABLE', 1246), + ('IRON', 1246), + ('PLASTIC', 1246), + ('PAY_AS_YOU_GO_BAG', 1247), + ('SEPARATION_BY_MATERIAL', 1247), + ('PAY_AS_YOU_GO_BAG', 1248), + ('PAY_AS_YOU_GO_BAG', 1249), + ('PAY_AS_YOU_GO_BAG', 1250), + ('PAY_AS_YOU_GO_BAG', 1251), + ('PAY_AS_YOU_GO_BAG', 1252), + ('BULKY', 1252), + ('PAY_AS_YOU_GO_BAG', 1253), + ('HOME_APPLIANCES', 1254), + ('PRO_FACILITY', 1255), + ('PAPER', 1256), + ('HOME_APPLIANCES', 1257), + ('PAY_AS_YOU_GO_BAG', 1258), + ('BULKY', 1258), + ('HOME_APPLIANCES', 1259), + ('HOME_APPLIANCES', 1260), + ('IRON', 1261), + ('ONLY_BOX', 1262), + ('PAY_AS_YOU_GO_BAG', 1263), + ('PAY_AS_YOU_GO_BAG', 1264), + ('PAY_AS_YOU_GO_BAG', 1265), + ('HOME_APPLIANCES', 1266), + ('PLASTIC', 1267), + ('PAPER', 1268), + ('HOME_APPLIANCES', 1269), + ('BULKY', 1270), + ('PRO_FACILITY', 1270), + ('PLASTIC', 1271), + ('PAPER', 1272), + ('PAY_AS_YOU_GO_BAG', 1273), + ('PAY_AS_YOU_GO_BAG', 1274), + ('BULKY', 1275), + ('PAY_AS_YOU_GO_BAG', 1276), + ('HOME_APPLIANCES', 1277), + ('PAY_AS_YOU_GO_BAG', 1278), + ('SEPARATION_BY_MATERIAL', 1278), + ('ONLY_BOX', 1279), + ('PAY_AS_YOU_GO_BAG', 1280), + ('BULKY', 1281), + ('NON_FLAMMABLE', 1282), + ('SEPARATION_BY_MATERIAL', 1282), + ('BULKY', 1283), + ('HOME_APPLIANCES', 1284), + ('IRON', 1285), + ('HOME_APPLIANCES', 1286), + ('HOME_APPLIANCES', 1287); + +INSERT INTO member (member_id, email, name, picture) +VALUES (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 'okjaeook98@gmail.com', '옥재욱', 'https://lh3.googleusercontent.com/a/ACg8ocJPZpvBzDi_TG3kMCt_eESIh1-GoXIJW9TyktH0e3NkPwg=s96-c'); + +SET @time := NOW(); + +INSERT INTO dogam (member_id, waste_id, created_date) +VALUES (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1001, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1002, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1003, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1004, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1005, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1006, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1007, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1008, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1009, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1010, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1011, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1012, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1013, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1014, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1015, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1016, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1017, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1018, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1019, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1020, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1021, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1022, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1023, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1024, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1025, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1026, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1027, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1028, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1029, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1030, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1031, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1032, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1033, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1034, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1035, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1036, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1037, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1038, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1039, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1040, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1041, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1042, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1043, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1044, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1045, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1046, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1047, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1048, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1049, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1050, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1051, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1052, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1053, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1054, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1055, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1056, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1057, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1058, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1059, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1060, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1061, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1062, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1063, @time := DATE_SUB(@time, INTERVAL 60 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1064, @time := DATE_SUB(@time, INTERVAL 60 SECOND)); \ No newline at end of file diff --git a/app/src/main/resources/db/migration/V5__insert_account.sql b/app/src/main/resources/db/migration/V5__insert_account.sql index e69de29..f0ec7cf 100644 --- a/app/src/main/resources/db/migration/V5__insert_account.sql +++ b/app/src/main/resources/db/migration/V5__insert_account.sql @@ -0,0 +1,2 @@ +INSERT INTO member (member_id, email, name, picture) +VALUES (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 'okjaeook98@gmail.com', '옥재욱', 'https://lh3.googleusercontent.com/a/ACg8ocJPZpvBzDi_TG3kMCt_eESIh1-GoXIJW9TyktH0e3NkPwg=s96-c'); diff --git a/app/src/main/resources/db/migration/V6__insert_board_values.sql b/app/src/main/resources/db/migration/V6__insert_board.sql similarity index 100% rename from app/src/main/resources/db/migration/V6__insert_board_values.sql rename to app/src/main/resources/db/migration/V6__insert_board.sql diff --git a/app/src/main/resources/db/migration/V7__insert_reply_values.sql b/app/src/main/resources/db/migration/V7__insert_reply.sql similarity index 100% rename from app/src/main/resources/db/migration/V7__insert_reply_values.sql rename to app/src/main/resources/db/migration/V7__insert_reply.sql diff --git a/app/src/main/resources/db/migration/V8__insert_dogam.sql b/app/src/main/resources/db/migration/V8__insert_dogam.sql new file mode 100644 index 0000000..2dcdbb2 --- /dev/null +++ b/app/src/main/resources/db/migration/V8__insert_dogam.sql @@ -0,0 +1,67 @@ +SET @time := NOW(); + +INSERT INTO dogam (member_id, waste_id, created_date) +VALUES (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1001, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1002, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1003, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1004, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1005, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1006, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1007, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1008, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1009, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1010, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1011, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1012, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1013, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1014, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1015, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1016, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1017, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1018, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1019, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1020, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1021, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1022, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1023, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1024, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1025, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1026, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1027, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1028, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1029, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1030, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1031, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1032, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1033, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1034, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1035, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1036, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1037, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1038, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1039, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1040, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1041, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1042, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1043, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1044, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1045, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1046, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1047, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1048, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1049, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1050, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1051, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1052, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1053, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1054, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1055, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1056, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1057, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1058, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1059, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1060, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1061, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1062, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1063, @time := DATE_ADD(@time, INTERVAL 1 SECOND)), + (UNHEX(REPLACE('4c29cb26-d2f3-38d8-9d02-a9da30c7ad99', '-', '')), 1064, @time := DATE_ADD(@time, INTERVAL 1 SECOND)); \ No newline at end of file diff --git a/domain/src/main/java/blisgo/domain/community/Reply.java b/domain/src/main/java/blisgo/domain/community/Reply.java index de76ebd..c16636a 100644 --- a/domain/src/main/java/blisgo/domain/community/Reply.java +++ b/domain/src/main/java/blisgo/domain/community/Reply.java @@ -18,8 +18,8 @@ public class Reply { private ReplyId replyId; private PostId postId; - private Author author; private String content; + private Author author; private LocalDateTime createdDate; private LocalDateTime modifiedDate; } diff --git a/domain/src/main/java/blisgo/domain/dictionary/vo/Category.java b/domain/src/main/java/blisgo/domain/dictionary/vo/Category.java index 6cdc558..a8528af 100644 --- a/domain/src/main/java/blisgo/domain/dictionary/vo/Category.java +++ b/domain/src/main/java/blisgo/domain/dictionary/vo/Category.java @@ -25,5 +25,5 @@ public enum Category { CAUTION("주의"), PRO_FACILITY("전문시설"); - final String tag; + private final String tag; } diff --git a/domain/src/main/java/blisgo/domain/dictionary/vo/DogamId.java b/domain/src/main/java/blisgo/domain/dictionary/vo/DogamId.java index 3fd170b..461316b 100644 --- a/domain/src/main/java/blisgo/domain/dictionary/vo/DogamId.java +++ b/domain/src/main/java/blisgo/domain/dictionary/vo/DogamId.java @@ -1,12 +1,14 @@ package blisgo.domain.dictionary.vo; import blisgo.domain.member.vo.MemberId; -import lombok.*; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; @Getter @AllArgsConstructor(staticName = "of") @NoArgsConstructor(access = AccessLevel.PROTECTED) -@Builder(toBuilder = true) public class DogamId { private MemberId memberId; private WasteId wasteId; diff --git a/infrastructure/internal/build.gradle b/infrastructure/internal/build.gradle index dbb1ad9..7262ab6 100644 --- a/infrastructure/internal/build.gradle +++ b/infrastructure/internal/build.gradle @@ -3,6 +3,10 @@ plugins { id 'io.swagger.swaggerhub' version '+' } +ext { + springCloudVersion = "2023.0.1" +} + bootJar.enabled = false jar.enabled = true diff --git a/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/persistence/base/JpaConfig.java b/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/persistence/base/JpaConfig.java index af5ff1b..a973e4c 100644 --- a/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/persistence/base/JpaConfig.java +++ b/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/persistence/base/JpaConfig.java @@ -1,7 +1,6 @@ package blisgo.infrastructure.internal.persistence.base; import blisgo.infrastructure.internal.InternalRoot; -import blisgo.infrastructure.internal.persistence.common.JpaAuthor; import com.querydsl.jpa.impl.JPAQueryFactory; import jakarta.persistence.EntityManager; import jakarta.persistence.PersistenceContext; @@ -13,6 +12,8 @@ import org.springframework.data.jpa.repository.config.EnableJpaAuditing; import org.springframework.data.jpa.repository.config.EnableJpaRepositories; +import java.util.UUID; + @Configuration @EnableJpaAuditing @EnableJpaRepositories(basePackageClasses = InternalRoot.class) @@ -29,7 +30,7 @@ public JPAQueryFactory init() { @Bean @Description("도메인 중 회원 정보 데이터가 필요한 경우 OIDC 에서 받아온 회원 정보를 사용하도록 함") - public AuditorAware auditorProvider() { + public AuditorAware auditorProvider() { return new OidcAuditorAware(); } diff --git a/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/persistence/base/MapperConfig.java b/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/persistence/base/MapperConfig.java index 06db0ad..5bc4d88 100644 --- a/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/persistence/base/MapperConfig.java +++ b/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/persistence/base/MapperConfig.java @@ -17,7 +17,7 @@ public ModelMapper modelMapper() { modelMapper.getConfiguration() .setFieldAccessLevel(org.modelmapper.config.Configuration.AccessLevel.PRIVATE) .setFieldMatchingEnabled(true) - .setMatchingStrategy(MatchingStrategies.LOOSE); + .setMatchingStrategy(MatchingStrategies.STANDARD); return modelMapper; } diff --git a/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/persistence/base/OidcAuditorAware.java b/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/persistence/base/OidcAuditorAware.java index 3fb61f1..e23b1d3 100644 --- a/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/persistence/base/OidcAuditorAware.java +++ b/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/persistence/base/OidcAuditorAware.java @@ -1,8 +1,7 @@ package blisgo.infrastructure.internal.persistence.base; -import blisgo.infrastructure.internal.persistence.common.JpaAuthor; -import blisgo.infrastructure.internal.persistence.common.JpaPicture; +import blisgo.domain.member.vo.MemberId; import lombok.NonNull; import org.springframework.data.domain.AuditorAware; import org.springframework.security.core.Authentication; @@ -11,29 +10,22 @@ import org.springframework.security.oauth2.core.oidc.user.OidcUser; import java.util.Optional; +import java.util.UUID; -public class OidcAuditorAware implements AuditorAware { +public class OidcAuditorAware implements AuditorAware { @NonNull @Override - public Optional getCurrentAuditor() { + public Optional getCurrentAuditor() { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); if (authentication == null || !authentication.isAuthenticated()) { - return Optional.of(JpaAuthor.of( - "admin@blisgo.com", - "관리자", - JpaPicture.of("https://res.cloudinary.com/blisgo/image/upload/f_auto,q_auto/v1/manifest/admin") - )); + return Optional.of(UUID.randomUUID()); } OidcUser oidcUser = (OidcUser) authentication.getPrincipal(); OidcUserInfo oidcUserInfo = oidcUser.getUserInfo(); - return Optional.of(JpaAuthor.of( - oidcUserInfo.getEmail(), - oidcUserInfo.getFullName(), - JpaPicture.of(oidcUserInfo.getPicture()) - )); + return Optional.ofNullable(MemberId.of(oidcUserInfo.getEmail()).id()); } } \ No newline at end of file diff --git a/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/persistence/common/BaseEntity.java b/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/persistence/common/BaseEntity.java index 5f0d28d..e8a171b 100644 --- a/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/persistence/common/BaseEntity.java +++ b/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/persistence/common/BaseEntity.java @@ -1,16 +1,19 @@ package blisgo.infrastructure.internal.persistence.common; -import jakarta.persistence.Embedded; import jakarta.persistence.EntityListeners; import jakarta.persistence.MappedSuperclass; +import jakarta.persistence.Transient; import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; +import org.hibernate.annotations.Comment; import org.springframework.data.annotation.LastModifiedBy; import org.springframework.data.jpa.domain.support.AuditingEntityListener; +import java.util.UUID; + @Getter @AllArgsConstructor(access = AccessLevel.PROTECTED) @NoArgsConstructor(access = AccessLevel.PROTECTED) @@ -19,7 +22,10 @@ @EntityListeners(AuditingEntityListener.class) public abstract class BaseEntity extends BaseTimeEntity { - @Embedded - @LastModifiedBy + @Transient protected JpaAuthor author; + + @LastModifiedBy + @Comment("회원 Id") + protected UUID memberId; } diff --git a/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/persistence/common/JpaAuthor.java b/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/persistence/common/JpaAuthor.java index 9b0ca6b..1cfd94e 100644 --- a/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/persistence/common/JpaAuthor.java +++ b/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/persistence/common/JpaAuthor.java @@ -1,30 +1,17 @@ package blisgo.infrastructure.internal.persistence.common; -import jakarta.persistence.AttributeOverride; -import jakarta.persistence.Column; -import jakarta.persistence.Embeddable; -import jakarta.persistence.Embedded; import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; -import org.hibernate.annotations.Comment; @Getter -@Embeddable @AllArgsConstructor(staticName = "of") -@NoArgsConstructor(access = AccessLevel.PROTECTED) +@NoArgsConstructor(access = AccessLevel.PUBLIC) public class JpaAuthor { - - @Column(name = "author_email") - @Comment("회원 이메일(FK)") private String email; - @Column(name = "author_name") - @Comment("작성자") private String name; - @Embedded - @AttributeOverride(name = "url", column = @Column(name = "author_picture")) private JpaPicture picture; } \ No newline at end of file diff --git a/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/persistence/common/JpaPicture.java b/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/persistence/common/JpaPicture.java index bdbccae..1513ce5 100644 --- a/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/persistence/common/JpaPicture.java +++ b/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/persistence/common/JpaPicture.java @@ -1,7 +1,6 @@ package blisgo.infrastructure.internal.persistence.common; import jakarta.persistence.Embeddable; -import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; @@ -11,7 +10,7 @@ @Getter @Embeddable @AllArgsConstructor(staticName = "of") -@NoArgsConstructor(access = AccessLevel.PROTECTED) +@NoArgsConstructor public class JpaPicture { @URL(protocol = "https") @Comment("이미지") diff --git a/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/persistence/community/PostMySQLAdapter.java b/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/persistence/community/PostMySQLAdapter.java index 5269741..222b456 100644 --- a/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/persistence/community/PostMySQLAdapter.java +++ b/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/persistence/community/PostMySQLAdapter.java @@ -1,8 +1,8 @@ package blisgo.infrastructure.internal.persistence.community; import blisgo.domain.community.Post; -import blisgo.infrastructure.internal.persistence.community.model.JpaPost; import blisgo.infrastructure.internal.persistence.community.mapper.PostMapper; +import blisgo.infrastructure.internal.persistence.community.model.JpaPost; import blisgo.infrastructure.internal.persistence.community.repository.PostCustomRepository; import blisgo.infrastructure.internal.persistence.community.repository.PostJpaRepository; import blisgo.usecase.port.PostOutputPort; @@ -34,7 +34,7 @@ public boolean create(Post domain) { @Override public Post read(Long postId) { - return jpaRepository.findById(postId) + return customRepository.findByIdWithReplies(postId) .map(mapper::toDomain) .orElse(null); } @@ -50,14 +50,8 @@ public Slice read(Map columns, Pageable pageable) { @Override @Transactional public boolean update(Post domain) { - if (domain.postId().id() == null) { - jpaRepository.save(mapper.toEntity(domain)); - return true; - } - - jpaRepository.findById(domain.postId().id()).ifPresentOrElse( - existingPost -> existingPost.updateInfo(mapper.toEntity(domain)), - () -> jpaRepository.save(mapper.toEntity(domain)) + jpaRepository.findById(domain.postId().id()).ifPresent( + existingPost -> existingPost.updateInfo(mapper.toEntity(domain)) ); return true; diff --git a/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/persistence/community/model/JpaPost.java b/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/persistence/community/model/JpaPost.java index f913784..84ee3af 100644 --- a/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/persistence/community/model/JpaPost.java +++ b/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/persistence/community/model/JpaPost.java @@ -1,14 +1,16 @@ package blisgo.infrastructure.internal.persistence.community.model; +import blisgo.infrastructure.internal.persistence.base.ContentConverter; import blisgo.infrastructure.internal.persistence.common.BaseEntity; import blisgo.infrastructure.internal.persistence.common.JpaContent; -import blisgo.infrastructure.internal.persistence.base.ContentConverter; -import jakarta.persistence.Table; import jakarta.persistence.*; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; -import org.hibernate.annotations.*; +import org.hibernate.annotations.ColumnDefault; +import org.hibernate.annotations.Comment; +import org.hibernate.annotations.DynamicInsert; +import org.hibernate.annotations.DynamicUpdate; @DynamicInsert @DynamicUpdate @@ -40,7 +42,7 @@ public class JpaPost extends BaseEntity { @Comment("좋아요") private long likes; - @Formula("(SELECT count(*) FROM reply r WHERE r.post_id = post_id)") + @Transient private long replies; @Version diff --git a/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/persistence/community/repository/PostCustomRepository.java b/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/persistence/community/repository/PostCustomRepository.java index 5c1bdf8..d90f206 100644 --- a/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/persistence/community/repository/PostCustomRepository.java +++ b/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/persistence/community/repository/PostCustomRepository.java @@ -1,8 +1,8 @@ package blisgo.infrastructure.internal.persistence.community.repository; import blisgo.infrastructure.internal.persistence.base.NoOffsetSliceHelper; +import blisgo.infrastructure.internal.persistence.common.JpaAuthor; import blisgo.infrastructure.internal.persistence.community.model.JpaPost; -import blisgo.infrastructure.internal.persistence.community.model.QJpaPost; import com.querydsl.core.types.Projections; import com.querydsl.jpa.impl.JPAQueryFactory; import lombok.RequiredArgsConstructor; @@ -13,6 +13,11 @@ import org.springframework.stereotype.Repository; import java.util.List; +import java.util.Optional; + +import static blisgo.infrastructure.internal.persistence.community.model.QJpaPost.jpaPost; +import static blisgo.infrastructure.internal.persistence.community.model.QJpaReply.jpaReply; +import static blisgo.infrastructure.internal.persistence.member.model.QJpaMember.jpaMember; @Repository @RequiredArgsConstructor @@ -21,23 +26,30 @@ public class PostCustomRepository { private final JdbcTemplate jdbcTemplate; public Slice find(Pageable pageable, long lastPostId) { - var qJpaPost = QJpaPost.jpaPost; + var joinMember = Projections.fields(JpaAuthor.class, + jpaMember.email, + jpaMember.name, + jpaMember.picture.as("picture") + ); var fields = Projections.fields(JpaPost.class, - qJpaPost.postId, - qJpaPost.title, - qJpaPost.content, - qJpaPost.author, - qJpaPost.views, - qJpaPost.likes, - qJpaPost.replies, - qJpaPost.modifiedDate + jpaPost.postId, + jpaPost.title, + jpaPost.content, + joinMember.as("author"), + jpaPost.views, + jpaPost.likes, + jpaPost.modifiedDate, + jpaReply.count().as("replies") ); var results = jpaQueryFactory.select(fields) - .from(qJpaPost) - .where(qJpaPost.postId.lt(lastPostId)) - .orderBy(qJpaPost.postId.desc()) + .from(jpaPost) + .leftJoin(jpaMember).on(jpaPost.memberId.eq(jpaMember.memberId)) + .leftJoin(jpaReply).on(jpaPost.postId.eq(jpaReply.postId)) + .where(jpaPost.postId.lt(lastPostId)) + .groupBy(jpaPost.postId) + .orderBy(jpaPost.postId.desc()) .limit(pageable.getPageSize() + 1L) .fetch(); @@ -47,7 +59,7 @@ public Slice find(Pageable pageable, long lastPostId) { } public List findAllPostIds() { - var qJpaPost = QJpaPost.jpaPost; + var qJpaPost = jpaPost; return jpaQueryFactory.select(qJpaPost.postId) .from(qJpaPost) @@ -55,7 +67,7 @@ public List findAllPostIds() { } public boolean updateViewCount(Long postId, Long views) { - var qJpaPost = QJpaPost.jpaPost; + var qJpaPost = jpaPost; return jpaQueryFactory.update(qJpaPost) .set(qJpaPost.views, views) @@ -64,12 +76,41 @@ public boolean updateViewCount(Long postId, Long views) { } public boolean updateLike(Long postId, Boolean isLike) { - var qJpaPost = QJpaPost.jpaPost; + var qJpaPost = jpaPost; return jpaQueryFactory.update(qJpaPost) .set(qJpaPost.likes, qJpaPost.likes.add(Boolean.TRUE.equals(isLike) ? 1 : -1)) .where(qJpaPost.postId.eq(postId)) .execute() > 0; } + + public Optional findByIdWithReplies(Long postId) { + var joinMember = Projections.fields(JpaAuthor.class, + jpaMember.email, + jpaMember.name, + jpaMember.picture.as("picture") + ); + + var fields = Projections.fields(JpaPost.class, + jpaPost.postId, + jpaPost.title, + jpaPost.content, + joinMember.as("author"), + jpaPost.views, + jpaPost.likes, + jpaPost.modifiedDate, + jpaReply.count().as("replies") + ); + + var result = jpaQueryFactory.select(fields) + .from(jpaPost) + .leftJoin(jpaMember).on(jpaPost.memberId.eq(jpaMember.memberId)) + .leftJoin(jpaReply).on(jpaPost.postId.eq(jpaReply.postId)) + .where(jpaPost.postId.eq(postId)) + .groupBy(jpaPost.postId) + .fetchOne(); + + return Optional.ofNullable(result); + } } diff --git a/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/persistence/community/repository/ReplyCustomRepository.java b/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/persistence/community/repository/ReplyCustomRepository.java index f991c3c..4a400ad 100644 --- a/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/persistence/community/repository/ReplyCustomRepository.java +++ b/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/persistence/community/repository/ReplyCustomRepository.java @@ -1,8 +1,9 @@ package blisgo.infrastructure.internal.persistence.community.repository; import blisgo.infrastructure.internal.persistence.base.NoOffsetSliceHelper; +import blisgo.infrastructure.internal.persistence.common.JpaAuthor; import blisgo.infrastructure.internal.persistence.community.model.JpaReply; -import blisgo.infrastructure.internal.persistence.community.model.QJpaReply; +import com.querydsl.core.types.Projections; import com.querydsl.jpa.impl.JPAQueryFactory; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Pageable; @@ -11,6 +12,9 @@ import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Repository; +import static blisgo.infrastructure.internal.persistence.community.model.QJpaReply.jpaReply; +import static blisgo.infrastructure.internal.persistence.member.model.QJpaMember.jpaMember; + @Repository @RequiredArgsConstructor public class ReplyCustomRepository { @@ -18,12 +22,24 @@ public class ReplyCustomRepository { private final JdbcTemplate jdbcTemplate; public Slice find(Pageable pageable, Long postId, long lastReplyId) { - var qJpaReply = QJpaReply.jpaReply; + var joinMember = Projections.fields(JpaAuthor.class, + jpaMember.email, + jpaMember.name, + jpaMember.picture.as("picture") + ); + var fields = Projections.fields(JpaReply.class, + jpaReply.replyId, + jpaReply.content, + jpaReply.createdDate, + joinMember.as("author") + ); - var results = jpaQueryFactory.selectFrom(qJpaReply) - .where(qJpaReply.postId.eq(postId)) - .where(qJpaReply.replyId.gt(lastReplyId)) + var results = jpaQueryFactory.select(fields) + .from(jpaReply) + .leftJoin(jpaMember).on(jpaReply.memberId.eq(jpaMember.memberId)) + .where(jpaReply.postId.eq(postId)) + .where(jpaReply.replyId.gt(lastReplyId)) .limit(pageable.getPageSize() + 1L) .fetch(); diff --git a/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/persistence/dictionary/DogamMySQLAdapter.java b/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/persistence/dictionary/DogamMySQLAdapter.java index d418917..773b7d5 100644 --- a/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/persistence/dictionary/DogamMySQLAdapter.java +++ b/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/persistence/dictionary/DogamMySQLAdapter.java @@ -2,6 +2,8 @@ import blisgo.domain.dictionary.Dogam; import blisgo.domain.dictionary.vo.DogamId; +import blisgo.domain.dictionary.vo.WasteId; +import blisgo.domain.member.vo.MemberId; import blisgo.infrastructure.internal.persistence.dictionary.mapper.DogamMapper; import blisgo.infrastructure.internal.persistence.dictionary.mapper.WasteMapper; import blisgo.infrastructure.internal.persistence.dictionary.model.JpaDogamId; @@ -38,4 +40,13 @@ public boolean create(Dogam domain) { jpaRepository.save(mapper.toEntity(domain)); return true; } + + @Override + public boolean readExists(MemberId memberId, WasteId wasteId) { + JpaDogamId dogamId = JpaDogamId.of( + memberId.id(), + wasteId.id() + ); + return jpaRepository.existsByDogamId(dogamId); + } } diff --git a/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/persistence/dictionary/model/JpaDogam.java b/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/persistence/dictionary/model/JpaDogam.java index 619511e..2e966b8 100644 --- a/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/persistence/dictionary/model/JpaDogam.java +++ b/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/persistence/dictionary/model/JpaDogam.java @@ -1,7 +1,9 @@ package blisgo.infrastructure.internal.persistence.dictionary.model; import blisgo.infrastructure.internal.persistence.common.BaseTimeEntity; -import jakarta.persistence.*; +import jakarta.persistence.EmbeddedId; +import jakarta.persistence.Entity; +import jakarta.persistence.Table; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; @@ -16,10 +18,4 @@ public class JpaDogam extends BaseTimeEntity { @EmbeddedId private JpaDogamId dogamId; - - @MapsId("wasteId") - @OneToOne(fetch = FetchType.EAGER) - @JoinColumn(name = "waste_id") - @Comment("폐기물 번호(PK, FK)") - private JpaWaste waste; } diff --git a/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/persistence/dictionary/model/JpaDogamId.java b/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/persistence/dictionary/model/JpaDogamId.java index be9c2a2..f1f2c3a 100644 --- a/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/persistence/dictionary/model/JpaDogamId.java +++ b/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/persistence/dictionary/model/JpaDogamId.java @@ -13,9 +13,9 @@ @AllArgsConstructor(staticName = "of") @NoArgsConstructor(access = AccessLevel.PROTECTED) public class JpaDogamId implements Serializable { - @Comment("회원 memberId(FK)") + @Comment("회원 번호(PK, FK)") private UUID memberId; - @Comment("폐기물 wasteId(FK)") + @Comment("폐기물 번호(PK, FK)") private Long wasteId; } \ No newline at end of file diff --git a/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/persistence/dictionary/repository/DogamJpaRepository.java b/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/persistence/dictionary/repository/DogamJpaRepository.java index fb5bc87..3250d26 100644 --- a/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/persistence/dictionary/repository/DogamJpaRepository.java +++ b/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/persistence/dictionary/repository/DogamJpaRepository.java @@ -15,4 +15,6 @@ public interface DogamJpaRepository extends JpaRepository { Slice findByDogamIdMemberId(UUID memberId, Pageable pageable); boolean deleteByDogamId(JpaDogamId dogamId); + + boolean existsByDogamId(JpaDogamId dogamId); } diff --git a/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/persistence/dictionary/repository/WasteCustomRepository.java b/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/persistence/dictionary/repository/WasteCustomRepository.java index 3249c3c..fed3739 100644 --- a/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/persistence/dictionary/repository/WasteCustomRepository.java +++ b/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/persistence/dictionary/repository/WasteCustomRepository.java @@ -27,11 +27,20 @@ public class WasteCustomRepository { private final JdbcTemplate jdbcTemplate; public Slice findWastesByMemberIdFromDogam(UUID memberId, Pageable pageable, LocalDateTime lastDogamCreatedDate) { - var results = jpaQueryFactory.selectFrom(jpaWaste) + var fields = Projections.fields( + JpaWaste.class, + jpaWaste.wasteId, + jpaWaste.name, + jpaWaste.picture, + jpaDogam.createdDate + ); + + var results = jpaQueryFactory.select(fields) + .from(jpaWaste) .join(jpaDogam).on(jpaWaste.wasteId.eq(jpaDogam.dogamId.wasteId)) .where(jpaDogam.dogamId.memberId.eq(memberId)) - .where(jpaWaste.createdDate.lt(lastDogamCreatedDate)) - .orderBy(jpaWaste.createdDate.desc()) + .where(jpaDogam.createdDate.lt(lastDogamCreatedDate)) + .orderBy(jpaDogam.createdDate.desc()) .limit(pageable.getPageSize() + 1L) .fetch(); diff --git a/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/persistence/member/model/JpaMember.java b/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/persistence/member/model/JpaMember.java index f1c7e04..258447b 100644 --- a/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/persistence/member/model/JpaMember.java +++ b/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/persistence/member/model/JpaMember.java @@ -39,7 +39,7 @@ public class JpaMember extends BaseTimeEntity { private JpaPicture picture; public void updateInfo(JpaMember jpaMember) { - this.name = jpaMember.name(); - this.picture = jpaMember.picture(); + this.name = name == null ? jpaMember.name() : name; + this.picture = picture == null ? jpaMember.picture() : picture; } } \ No newline at end of file diff --git a/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/security/CustomOidcUserService.java b/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/security/CustomOidcUserService.java index 8cbb857..f5f0d70 100644 --- a/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/security/CustomOidcUserService.java +++ b/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/security/CustomOidcUserService.java @@ -1,15 +1,23 @@ package blisgo.infrastructure.internal.security; +import blisgo.domain.member.Member; import blisgo.usecase.port.MemberInputPort; +import blisgo.usecase.request.member.GetMember; import blisgo.usecase.request.member.UpdateMember; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.security.oauth2.client.oidc.userinfo.OidcUserRequest; import org.springframework.security.oauth2.client.oidc.userinfo.OidcUserService; import org.springframework.security.oauth2.core.OAuth2AuthenticationException; import org.springframework.security.oauth2.core.oidc.OidcUserInfo; +import org.springframework.security.oauth2.core.oidc.user.DefaultOidcUser; import org.springframework.security.oauth2.core.oidc.user.OidcUser; import org.springframework.stereotype.Service; +import java.util.HashMap; +import java.util.Map; + +@Slf4j @Service @RequiredArgsConstructor public class CustomOidcUserService extends OidcUserService { @@ -21,12 +29,31 @@ public OidcUser loadUser(OidcUserRequest oidcUserRequest) throws OAuth2Authentic registerOrUpdate(oidcUser.getUserInfo()); - return oidcUser; + GetMember query = GetMember.builder() + .email(oidcUser.getUserInfo().getEmail()) + .build(); + + Member member = usecase.getMember(query); + + return new DefaultOidcUser( + oidcUser.getAuthorities(), + oidcUserRequest.getIdToken(), + updateUserInfo(oidcUser.getUserInfo(), member) + ); + } + + private OidcUserInfo updateUserInfo(OidcUserInfo info, Member member) { + Map claims = new HashMap<>(info.getClaims()); + claims.put("email", member.email()); + claims.put("nickname", member.name()); + claims.put("picture", member.picture().url()); + + return new OidcUserInfo(claims); } - public void registerOrUpdate(OidcUserInfo oidcUserInfo) { + private void registerOrUpdate(OidcUserInfo oidcUserInfo) { String email = oidcUserInfo.getEmail(); - String name = oidcUserInfo.getFullName(); + String name = oidcUserInfo.getNickName(); String picture = oidcUserInfo.getPicture(); UpdateMember command = UpdateMember.builder() diff --git a/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/security/SecurityConfig.java b/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/security/SecurityConfig.java index 7388e09..ec3429d 100644 --- a/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/security/SecurityConfig.java +++ b/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/security/SecurityConfig.java @@ -43,7 +43,6 @@ public SecurityFilterChain configure(HttpSecurity http) throws Exception { http.oauth2Login(oauth2Login -> oauth2Login .loginPage("/oauth2/authorization/okta") - .defaultSuccessUrl("/", false) .userInfoEndpoint(userInfoEndpoint -> userInfoEndpoint .oidcUserService(customOidcUserService) ) diff --git a/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/ui/component/UnsplashClient.java b/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/ui/component/UnsplashClient.java index 810e083..b870a33 100644 --- a/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/ui/component/UnsplashClient.java +++ b/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/ui/component/UnsplashClient.java @@ -1,71 +1,68 @@ package blisgo.infrastructure.internal.ui.component; +import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -import lombok.AccessLevel; -import lombok.NoArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.core.io.ClassPathResource; -import org.springframework.core.io.Resource; - -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; +import org.springframework.web.client.RestClient; +import org.springframework.web.util.UriComponentsBuilder; + import java.net.URI; -import java.net.http.HttpClient; -import java.net.http.HttpRequest; -import java.net.http.HttpResponse; -import java.nio.channels.Channels; -import java.nio.channels.ReadableByteChannel; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.Optional; - -@Slf4j -@NoArgsConstructor(access = AccessLevel.PRIVATE) + +@Component public class UnsplashClient { - static final String HOST = "https://api.unsplash.com/photos/random"; - static final String QUERY = "waste,garbage,trash,recycling"; - static final String OPTIONS = "&fm=webp&w=1500&q=50&blur=50"; - static final String CLIENT_ID = "CTW7rq3n5wwaqHphLTlv47RsPHweBqy4QWe7_YVCvk8"; - - public static void changeWallpaper() throws IOException, InterruptedException { - Optional imageUrl = Optional.of(getImageUrl()); - replaceImage(imageUrl.get()); - } + private static final RestClient restClient = RestClient.create(); + + @Value("${unsplash.host}") + private String host; + + @Value("${unsplash.path}") + private String path; + + @Value("${unsplash.query}") + private String query; + + @Value("${unsplash.client-id}") + private String clientId; + @Value("${unsplash.options}") + private String options; - public static String getImageUrl() throws IOException, InterruptedException { - String link = String.format(HOST + "?query=" + QUERY + "&client_id=" + CLIENT_ID); - HttpRequest request = HttpRequest.newBuilder().uri(URI.create(link)).method("GET", HttpRequest.BodyPublishers.noBody()).build(); + public byte[] bringImage() throws JsonProcessingException { + String imageUrl = bringImageUrl(); - try (HttpClient client = HttpClient.newHttpClient()) { - HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString()); + URI uri = UriComponentsBuilder.fromUriString(imageUrl) + .queryParam("options", options) + .build() + .toUri(); - ObjectMapper mapper = new ObjectMapper(); - JsonNode jsonObj = mapper.readTree(response.body()); - jsonObj = jsonObj.get("urls"); + var response = restClient.get() + .uri(uri) + .retrieve(); - return jsonObj.get("raw").asText().concat(OPTIONS); - } + return response.body(byte[].class); } - private static void replaceImage(String editedImageLink) throws IOException, InterruptedException { - HttpRequest request = HttpRequest.newBuilder() - .uri(URI.create(editedImageLink)) - .build(); + private String bringImageUrl() throws JsonProcessingException { + URI uri = UriComponentsBuilder.newInstance() + .scheme("https") + .host(host) + .path(path) + .queryParam("query", query) + .queryParam("client_id", clientId) + .build() + .toUri(); - try (HttpClient client = HttpClient.newHttpClient()) { - HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofInputStream()); + var response = restClient.get() + .uri(uri) + .retrieve(); - ReadableByteChannel rbc = Channels.newChannel(response.body()); - Resource resource = new ClassPathResource("static/assets/img/index_wallpaper.webp"); - Path wallpaperDir = Paths.get(resource.getURI()); - log.info("파일 위치>" + wallpaperDir); + JsonNode jsonObj = new ObjectMapper().readTree(response.body(String.class)); - try (FileOutputStream fos = new FileOutputStream(wallpaperDir.toFile())) { - fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); - } - } + return jsonObj.get("urls") + .get("raw") + .asText() + .concat(options); } -} +} \ No newline at end of file diff --git a/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/ui/component/WallpaperChanger.java b/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/ui/component/WallpaperChanger.java index e40724c..af58705 100644 --- a/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/ui/component/WallpaperChanger.java +++ b/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/ui/component/WallpaperChanger.java @@ -1,21 +1,43 @@ package blisgo.infrastructure.internal.ui.component; -import jakarta.annotation.PostConstruct; import lombok.Getter; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.core.io.ClassPathResource; import org.springframework.stereotype.Component; +import java.io.ByteArrayInputStream; +import java.io.FileOutputStream; import java.io.IOException; +import java.io.InputStream; +import java.nio.channels.Channels; +import java.nio.channels.ReadableByteChannel; +import java.nio.file.Path; +import java.nio.file.Paths; @Getter @Slf4j @Component +@RequiredArgsConstructor public class WallpaperChanger { - private volatile String wallpaperUrl; + private final UnsplashClient client; - @PostConstruct - public void changeIndexWallpaperDaily() throws IOException, InterruptedException { - wallpaperUrl = UnsplashClient.getImageUrl(); + /*@PostConstruct*/ + public void changeWallpaper() throws IOException { + byte[] imageBytes = client.bringImage(); + + ClassPathResource resource = new ClassPathResource("static/assets/img/index_wallpaper.webp"); + Path wallpaperDir = Paths.get(resource.getURI()); + + try ( + InputStream in = new ByteArrayInputStream(imageBytes); + ReadableByteChannel rbc = Channels.newChannel(in); + FileOutputStream fos = new FileOutputStream(wallpaperDir.toFile(), false) + ) { + fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); + } catch (IOException e) { + throw new RuntimeException(e); + } } } diff --git a/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/ui/render/DogamRender.java b/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/ui/render/DogamRender.java index 4fc8661..951fa49 100644 --- a/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/ui/render/DogamRender.java +++ b/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/ui/render/DogamRender.java @@ -2,22 +2,17 @@ import blisgo.infrastructure.internal.persistence.dictionary.mapper.WasteMapper; import blisgo.infrastructure.internal.ui.base.Router; -import blisgo.usecase.request.dogam.AddDogam; -import blisgo.usecase.request.dogam.DogamCommand; -import blisgo.usecase.request.dogam.DogamQuery; -import blisgo.usecase.request.dogam.GetDogam; +import blisgo.usecase.request.dogam.*; import blisgo.usecase.request.waste.WasteQuery; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Pageable; import org.springframework.data.web.PageableDefault; +import org.springframework.http.HttpStatus; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.security.oauth2.core.oidc.user.DefaultOidcUser; import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; import java.time.LocalDateTime; @@ -29,22 +24,42 @@ @RequestMapping("/dogams") @RequiredArgsConstructor public class DogamRender extends Router { - private final DogamQuery queryUsecase; - private final DogamCommand commandUsecase; + private final DogamQuery dogamQuery; + private final DogamCommand dogamCommand; private final WasteQuery wasteQuery; private final WasteMapper wasteMapper; - // 도감 추가 @PostMapping - public void createDogam(AddDogam command) { - commandUsecase.addDogam(command); + @ResponseStatus(HttpStatus.CREATED) + @PreAuthorize("isAuthenticated()") + public void createDogam( + @AuthenticationPrincipal DefaultOidcUser oidcUser, + AddDogam command + ) { + command = command.toBuilder() + .email(oidcUser.getEmail()) + .build(); + + dogamCommand.addDogam(command); } - // 도감 삭제 + @DeleteMapping + @ResponseStatus(HttpStatus.NO_CONTENT) + @PreAuthorize("isAuthenticated()") + public void deleteDogam( + @AuthenticationPrincipal DefaultOidcUser oidcUser, + RemoveDogam command + ) { + command = command.toBuilder() + .email(oidcUser.getEmail()) + .build(); + + dogamCommand.removeDogam(command); + } @GetMapping @PreAuthorize("isAuthenticated()") - public ModelAndView dogam( + public ModelAndView dogams( @AuthenticationPrincipal DefaultOidcUser oidcUser, @PageableDefault(size = 12, sort = "createdDate", direction = DESC) Pageable pageable, @RequestParam(required = false) LocalDateTime lastDogamCreatedDate @@ -53,18 +68,35 @@ public ModelAndView dogam( lastDogamCreatedDate = LocalDateTime.now(); } - GetDogam query = GetDogam.builder() + var query = GetDogam.builder() .email(oidcUser.getEmail()) .pageable(pageable) .lastDogamCreatedDate(lastDogamCreatedDate) .build(); - var wastes = wasteQuery.getWastesFromDogam(query); + var dogams = wasteQuery.getWastesFromDogam(query); return new ModelAndView( - routes(Folder.MEMBER, Page.PROFILE) + fragment(Fragment.WASTES), - Map.of("wastes", wastes.map(wasteMapper::toDTO)) + routes(Folder.MEMBER, Page.PROFILE) + fragment(Fragment.DOGAMS), + Map.of("dogams", dogams.map(wasteMapper::toDTO)) ); + } + + @GetMapping("/{wasteId}") + @ResponseStatus(HttpStatus.OK) + public boolean dogam( + @AuthenticationPrincipal DefaultOidcUser oidcUser, + @PathVariable Long wasteId + ) { + if (oidcUser == null) { + return false; + } + + var query = GetDogam.builder() + .email(oidcUser.getEmail()) + .wasteId(wasteId) + .build(); + return dogamQuery.checkThatWasteRegisteredFromDogam(query); } } diff --git a/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/ui/render/PostRender.java b/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/ui/render/PostRender.java index 288f2a0..1a63017 100644 --- a/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/ui/render/PostRender.java +++ b/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/ui/render/PostRender.java @@ -7,6 +7,7 @@ import org.springframework.data.domain.Pageable; import org.springframework.data.web.PageableDefault; import org.springframework.http.HttpStatus; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; @@ -27,61 +28,69 @@ public class PostRender extends Router { @GetMapping public ModelAndView posts( @PageableDefault(sort = "createdDate", direction = DESC) Pageable pageable, - @RequestParam(required = false, defaultValue = "" + Long.MAX_VALUE) Long lastPostId, - @RequestParam(required = false) Long postId + @RequestParam(required = false, defaultValue = "" + Long.MAX_VALUE) Long lastPostId ) { - if (postId == null) { - var query = GetPost.builder() - .pageable(pageable) - .postId(lastPostId) - .build(); - - var posts = queryUsecase.getPosts(query); - - return new ModelAndView( - routes(Folder.COMMUNITY, Page.BOARD) + fragment(Fragment.POSTS), - Map.of("posts", posts.map(mapper::toDTO)) - ); - } else { - var query = GetPost.builder() - .postId(postId) - .build(); - - var post = queryUsecase.getPost(query); - - return new ModelAndView( - routes(Folder.COMMUNITY, Page.CONTENT) + fragment(Fragment.POST), - Map.ofEntries( - Map.entry("post", mapper.toDTO(post)), - Map.entry("readOnly", true) - ) - ); - } + var query = GetPost.builder() + .pageable(pageable) + .postId(lastPostId) + .build(); + + var posts = queryUsecase.getPosts(query); + + return new ModelAndView( + routes(Folder.COMMUNITY, Page.BOARD) + fragment(Fragment.POSTS), + Map.of("posts", posts.map(mapper::toDTO)) + ); + } + + @GetMapping("/{postId}") + public ModelAndView post(@PathVariable Long postId) { + var query = GetPost.builder() + .postId(postId) + .build(); + + var post = queryUsecase.getPost(query); + + return new ModelAndView( + routes(Folder.COMMUNITY, Page.CONTENT) + fragment(Fragment.POST), + Map.ofEntries( + Map.entry("post", mapper.toDTO(post)), + Map.entry("readOnly", true) + ) + ); } @PostMapping - @PatchMapping - public RedirectView updateOrCreatePost(UpdatePost command) { - if (command.postId() == null) - commandUsecase.addPost(new AddPost(command.title(), command.content())); - else { - commandUsecase.updatePost(command); - } + @PreAuthorize("isAuthenticated()") + public RedirectView addPost(AddPost command) { + commandUsecase.addPost(command); return new RedirectView(routes(Folder.COMMUNITY), false); } + @PatchMapping("/{postId}") + @PreAuthorize("isAuthenticated()") + public RedirectView updatePost(UpdatePost command) { + commandUsecase.updatePost(command); + + return new RedirectView(routes(Folder.COMMUNITY, command.postId()), true); + } + @DeleteMapping("/{postId}") - public RedirectView removePost(@PathVariable long postId) { - commandUsecase.removePost(new RemovePost(postId)); + @PreAuthorize("isAuthenticated()") + public RedirectView removePost(@PathVariable Long postId) { + var command = new RemovePost(postId); + + commandUsecase.removePost(command); return new RedirectView(routes(Folder.COMMUNITY), false); } @PostMapping("/{postId}/like") - @ResponseStatus(HttpStatus.OK) + @ResponseStatus(HttpStatus.NO_CONTENT) + @PreAuthorize("isAuthenticated()") public void like(@PathVariable Long postId) { - PostLike command = PostLike.builder() + var command = PostLike.builder() .postId(postId) .isLike(true) .build(); @@ -90,9 +99,10 @@ public void like(@PathVariable Long postId) { } @PostMapping("/{postId}/dislike") - @ResponseStatus(HttpStatus.OK) + @ResponseStatus(HttpStatus.NO_CONTENT) + @PreAuthorize("isAuthenticated()") public void dislike(@PathVariable Long postId) { - PostLike command = PostLike.builder() + var command = PostLike.builder() .postId(postId) .isLike(false) .build(); diff --git a/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/ui/render/ReplyRender.java b/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/ui/render/ReplyRender.java index 4217b1d..46192f9 100644 --- a/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/ui/render/ReplyRender.java +++ b/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/ui/render/ReplyRender.java @@ -24,43 +24,37 @@ public class ReplyRender extends Router { private final ReplyQuery queryUsecase; private final ReplyMapper mapper; - - @GetMapping("/{postId}") + @GetMapping public ModelAndView replies( - @PathVariable Long postId, - @PageableDefault(sort = "createdDate", direction = ASC) Pageable pageable, - @RequestParam(required = false, defaultValue = "0") Long lastReplyId + @RequestParam Long postId, + @RequestParam(required = false, defaultValue = "0") Long lastReplyId, + @PageableDefault(sort = "createdDate", direction = ASC) Pageable pageable ) { - GetReply query = GetReply.builder() + var query = GetReply.builder() .postId(postId) .lastReplyId(lastReplyId) .pageable(pageable) .build(); + var replies = queryUsecase.getReplies(query); + return new ModelAndView( routes(Router.Folder.COMMUNITY, Router.Page.CONTENT) + fragment(Router.Fragment.REPLIES), - Map.of("replies", queryUsecase.getReplies(query) - .map(mapper::toDTO) - .map(ReplyDTO::withTimeDiff) + Map.ofEntries( + Map.entry("replies", replies.map(mapper::toDTO).map(ReplyDTO::withTimeDiff)), + Map.entry("postId", postId) ) ); } - @PostMapping("/{postId}") + @PostMapping @PreAuthorize("isAuthenticated()") - public ModelAndView create( - @PathVariable Long postId, - @RequestParam String content - ) { - AddReply command = AddReply.builder() - .postId(postId) - .content(content) - .build(); - + public ModelAndView create(AddReply command) { commandUsecase.addReply(command); return new ModelAndView( - routes(Router.Folder.COMMUNITY, Router.Page.CONTENT) + fragment(Router.Fragment.REPLIES) + routes(Router.Folder.COMMUNITY, Router.Page.CONTENT) + fragment(Router.Fragment.REPLIES), + Map.of("postId", command.postId()) ); } diff --git a/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/ui/render/WasteRender.java b/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/ui/render/WasteRender.java index 32a1760..fe4f95c 100644 --- a/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/ui/render/WasteRender.java +++ b/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/ui/render/WasteRender.java @@ -33,7 +33,7 @@ public ModelAndView wastes( @RequestParam(required = false) Long wasteId ) { if (wasteId == null) { - GetWaste query = GetWaste.builder() + var query = GetWaste.builder() .pageable(pageable) .lastWasteId(lastWasteId) .build(); diff --git a/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/ui/view/HomeView.java b/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/ui/view/HomeView.java index 64b48c9..0486378 100644 --- a/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/ui/view/HomeView.java +++ b/infrastructure/internal/src/main/java/blisgo/infrastructure/internal/ui/view/HomeView.java @@ -1,7 +1,6 @@ package blisgo.infrastructure.internal.ui.view; import blisgo.infrastructure.internal.ui.base.Router; -import blisgo.infrastructure.internal.ui.component.WallpaperChanger; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Controller; @@ -10,21 +9,14 @@ import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.view.RedirectView; -import java.util.Map; - @Slf4j @RequiredArgsConstructor @Controller @RequestMapping("/") public class HomeView extends Router { - private final WallpaperChanger wallpaperChanger; - @GetMapping public ModelAndView index() { - return new ModelAndView( - routes(Page.INDEX), - Map.of("wallpaper", wallpaperChanger.wallpaperUrl()) - ); + return new ModelAndView(routes(Page.INDEX)); } @GetMapping("/login") diff --git a/infrastructure/internal/src/main/resources/application-common.yml b/infrastructure/internal/src/main/resources/application-common.yml index e69de29..c7321a7 100644 --- a/infrastructure/internal/src/main/resources/application-common.yml +++ b/infrastructure/internal/src/main/resources/application-common.yml @@ -0,0 +1,6 @@ +unsplash: + host: 'api.unsplash.com' + path: '/photos/random' + query: 'waste,garbage,trash,recycling' + options: '&fm=webp&w=1500&q=50&blur=50' + client-id: 'CTW7rq3n5wwaqHphLTlv47RsPHweBqy4QWe7_YVCvk8' diff --git a/infrastructure/internal/src/main/resources/robots.txt b/infrastructure/internal/src/main/resources/robots.txt new file mode 100644 index 0000000..9a2c4e6 --- /dev/null +++ b/infrastructure/internal/src/main/resources/robots.txt @@ -0,0 +1,16 @@ +# 허용된 플랫폼 별 검색 bot +User-agent: * + +# 파일 확장자 제한 +Disallow: /*.html$ +Disallow: /*.css$ +Disallow: /*.js$ +Disallow: /*.txt$ + +# 특정 페이지 제한 +Disallow: /account/ +Disallow: /board/ +Allow: /dictionary/ + +# 사이트맵 지정 +Sitemap: https://blisgo.up.railway.app/sitemap.xml \ No newline at end of file diff --git a/infrastructure/internal/src/main/resources/sitemap.xml b/infrastructure/internal/src/main/resources/sitemap.xml new file mode 100644 index 0000000..3a5d5bc --- /dev/null +++ b/infrastructure/internal/src/main/resources/sitemap.xml @@ -0,0 +1,30 @@ + + + + https://blisgo.up.railway.app/templates/base/header.html + + + https://blisgo.up.railway.app/templates/base/layout.html + + + https://blisgo.up.railway.app/templates/community/board.html + + + https://blisgo.up.railway.app/templates/community/content.html + + + https://blisgo.up.railway.app/templates/community/write.html + + + https://blisgo.up.railway.app/templates/dictionary/catalogue.html + + + https://blisgo.up.railway.app/templates/dictionary/info.html + + + https://blisgo.up.railway.app/templates/member/profile.html + + + https://blisgo.up.railway.app/templates/ + + \ No newline at end of file diff --git a/infrastructure/internal/src/main/resources/static/assets/img/index_wallpaper.webp b/infrastructure/internal/src/main/resources/static/assets/img/index_wallpaper.webp new file mode 100644 index 0000000..6a82ad1 Binary files /dev/null and b/infrastructure/internal/src/main/resources/static/assets/img/index_wallpaper.webp differ diff --git a/infrastructure/internal/src/main/resources/templates/base/header.html b/infrastructure/internal/src/main/resources/templates/base/header.html index a0707d8..49bec86 100644 --- a/infrastructure/internal/src/main/resources/templates/base/header.html +++ b/infrastructure/internal/src/main/resources/templates/base/header.html @@ -134,7 +134,7 @@
\ No newline at end of file diff --git a/infrastructure/internal/src/main/resources/templates/community/board.html b/infrastructure/internal/src/main/resources/templates/community/board.html index 9a89ad1..1ae7694 100644 --- a/infrastructure/internal/src/main/resources/templates/community/board.html +++ b/infrastructure/internal/src/main/resources/templates/community/board.html @@ -111,11 +111,12 @@
- +

글내용

프로필이미지작성자작성일좋아요댓글
\ No newline at end of file diff --git a/infrastructure/internal/src/main/resources/templates/community/content.html b/infrastructure/internal/src/main/resources/templates/community/content.html index 0136750..b033215 100644 --- a/infrastructure/internal/src/main/resources/templates/community/content.html +++ b/infrastructure/internal/src/main/resources/templates/community/content.html @@ -104,7 +104,6 @@ - @@ -115,17 +114,27 @@
-
-
-
-
+
닉네임 - 작성일조회수좋아요
\ No newline at end of file +
\ No newline at end of file diff --git a/infrastructure/internal/src/main/resources/templates/community/write.html b/infrastructure/internal/src/main/resources/templates/community/write.html index e9f924b..cbb2fc3 100644 --- a/infrastructure/internal/src/main/resources/templates/community/write.html +++ b/infrastructure/internal/src/main/resources/templates/community/write.html @@ -111,7 +111,7 @@
-
+
diff --git a/infrastructure/internal/src/main/resources/templates/dictionary/catalogue.html b/infrastructure/internal/src/main/resources/templates/dictionary/catalogue.html index f00a7e6..de2e6cf 100644 --- a/infrastructure/internal/src/main/resources/templates/dictionary/catalogue.html +++ b/infrastructure/internal/src/main/resources/templates/dictionary/catalogue.html @@ -112,18 +112,18 @@
-
+
-
+
+
+ +
+
사전 이미지
품명
-
- -
-
diff --git a/infrastructure/internal/src/main/resources/templates/dictionary/info.html b/infrastructure/internal/src/main/resources/templates/dictionary/info.html index 5cf43ba..77a5992 100644 --- a/infrastructure/internal/src/main/resources/templates/dictionary/info.html +++ b/infrastructure/internal/src/main/resources/templates/dictionary/info.html @@ -123,17 +123,17 @@ -

이름

-
+
- 별점/10
+ 별점/10
태그명 diff --git a/infrastructure/internal/src/main/resources/templates/index.html b/infrastructure/internal/src/main/resources/templates/index.html index 1e9e145..d0ce0f9 100644 --- a/infrastructure/internal/src/main/resources/templates/index.html +++ b/infrastructure/internal/src/main/resources/templates/index.html @@ -111,7 +111,7 @@
-
+
diff --git a/infrastructure/internal/src/main/resources/templates/member/profile.html b/infrastructure/internal/src/main/resources/templates/member/profile.html index c25b446..7c11529 100644 --- a/infrastructure/internal/src/main/resources/templates/member/profile.html +++ b/infrastructure/internal/src/main/resources/templates/member/profile.html @@ -110,14 +110,12 @@
-
-
+
+
- -
프로필
- +
프로필

옥재욱

-
okjaeook98@gmail.com
since. 2020-03-01
\ No newline at end of file +
okjaeook98@gmail.com
since. 2020-03-01
사전 이미지
품명
\ No newline at end of file diff --git a/usecase/src/main/java/blisgo/usecase/port/DogamInputPort.java b/usecase/src/main/java/blisgo/usecase/port/DogamInputPort.java index 7c98811..2d9968a 100644 --- a/usecase/src/main/java/blisgo/usecase/port/DogamInputPort.java +++ b/usecase/src/main/java/blisgo/usecase/port/DogamInputPort.java @@ -4,10 +4,7 @@ import blisgo.domain.dictionary.vo.DogamId; import blisgo.domain.dictionary.vo.WasteId; import blisgo.domain.member.vo.MemberId; -import blisgo.usecase.request.dogam.AddDogam; -import blisgo.usecase.request.dogam.DogamCommand; -import blisgo.usecase.request.dogam.DogamQuery; -import blisgo.usecase.request.dogam.RemoveDogam; +import blisgo.usecase.request.dogam.*; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -20,7 +17,7 @@ public class DogamInputPort implements DogamCommand, DogamQuery { @Override public boolean addDogam(AddDogam command) { - MemberId memberId = MemberId.of(command.memberId()); + MemberId memberId = MemberId.of(command.email()); WasteId wasteId = WasteId.of(command.wasteId()); Dogam dogam = Dogam.create(memberId, wasteId); @@ -30,14 +27,19 @@ public boolean addDogam(AddDogam command) { @Override public boolean removeDogam(RemoveDogam command) { - MemberId memberId = MemberId.of(command.memberId()); + MemberId memberId = MemberId.of(command.email()); WasteId wasteId = WasteId.of(command.wasteId()); - DogamId dogamId = DogamId.builder() - .memberId(memberId) - .wasteId(wasteId) - .build(); + DogamId dogamId = DogamId.of(memberId, wasteId); return port.delete(dogamId); } + + @Override + public boolean checkThatWasteRegisteredFromDogam(GetDogam query) { + MemberId memberId = MemberId.of(query.email()); + WasteId wasteId = WasteId.of(query.wasteId()); + + return port.readExists(memberId, wasteId); + } } diff --git a/usecase/src/main/java/blisgo/usecase/port/DogamOutputPort.java b/usecase/src/main/java/blisgo/usecase/port/DogamOutputPort.java index edcf9e9..5e98704 100644 --- a/usecase/src/main/java/blisgo/usecase/port/DogamOutputPort.java +++ b/usecase/src/main/java/blisgo/usecase/port/DogamOutputPort.java @@ -2,6 +2,8 @@ import blisgo.domain.dictionary.Dogam; import blisgo.domain.dictionary.vo.DogamId; +import blisgo.domain.dictionary.vo.WasteId; +import blisgo.domain.member.vo.MemberId; import org.jmolecules.architecture.hexagonal.SecondaryPort; @SecondaryPort @@ -9,4 +11,6 @@ public interface DogamOutputPort { boolean delete(DogamId identifier); boolean create(Dogam domain); + + boolean readExists(MemberId memberId, WasteId wasteId); } diff --git a/usecase/src/main/java/blisgo/usecase/request/dogam/AddDogam.java b/usecase/src/main/java/blisgo/usecase/request/dogam/AddDogam.java index 10ab557..42948a9 100644 --- a/usecase/src/main/java/blisgo/usecase/request/dogam/AddDogam.java +++ b/usecase/src/main/java/blisgo/usecase/request/dogam/AddDogam.java @@ -2,11 +2,9 @@ import lombok.Builder; -import java.util.UUID; - -@Builder +@Builder(toBuilder = true) public record AddDogam( - UUID memberId, + String email, Long wasteId ) { } diff --git a/usecase/src/main/java/blisgo/usecase/request/dogam/DogamQuery.java b/usecase/src/main/java/blisgo/usecase/request/dogam/DogamQuery.java index 105aea4..ab52f68 100644 --- a/usecase/src/main/java/blisgo/usecase/request/dogam/DogamQuery.java +++ b/usecase/src/main/java/blisgo/usecase/request/dogam/DogamQuery.java @@ -4,4 +4,5 @@ @PrimaryPort public interface DogamQuery { + boolean checkThatWasteRegisteredFromDogam(GetDogam query); } diff --git a/usecase/src/main/java/blisgo/usecase/request/dogam/GetDogam.java b/usecase/src/main/java/blisgo/usecase/request/dogam/GetDogam.java index 41b18ce..65d2b9a 100644 --- a/usecase/src/main/java/blisgo/usecase/request/dogam/GetDogam.java +++ b/usecase/src/main/java/blisgo/usecase/request/dogam/GetDogam.java @@ -9,6 +9,7 @@ public record GetDogam( String email, Pageable pageable, - LocalDateTime lastDogamCreatedDate + LocalDateTime lastDogamCreatedDate, + Long wasteId ) { } diff --git a/usecase/src/main/java/blisgo/usecase/request/dogam/RemoveDogam.java b/usecase/src/main/java/blisgo/usecase/request/dogam/RemoveDogam.java index 2224601..5dbb523 100644 --- a/usecase/src/main/java/blisgo/usecase/request/dogam/RemoveDogam.java +++ b/usecase/src/main/java/blisgo/usecase/request/dogam/RemoveDogam.java @@ -2,11 +2,9 @@ import lombok.Builder; -import java.util.UUID; - -@Builder +@Builder(toBuilder = true) public record RemoveDogam( - UUID memberId, + String email, Long wasteId -) { +) { } diff --git a/usecase/src/main/java/blisgo/usecase/request/reply/AddReply.java b/usecase/src/main/java/blisgo/usecase/request/reply/AddReply.java index 0e96d2e..b24f546 100644 --- a/usecase/src/main/java/blisgo/usecase/request/reply/AddReply.java +++ b/usecase/src/main/java/blisgo/usecase/request/reply/AddReply.java @@ -2,7 +2,7 @@ import lombok.Builder; -@Builder +@Builder(toBuilder = true) public record AddReply( Long postId, String content diff --git a/usecase/src/main/java/blisgo/usecase/request/waste/WasteQuery.java b/usecase/src/main/java/blisgo/usecase/request/waste/WasteQuery.java index ef2819e..c0f18b1 100644 --- a/usecase/src/main/java/blisgo/usecase/request/waste/WasteQuery.java +++ b/usecase/src/main/java/blisgo/usecase/request/waste/WasteQuery.java @@ -20,6 +20,4 @@ public interface WasteQuery { Slice getWastesFromDogam(GetDogam query); List getWastesRelated(List categories); - - } diff --git "a/\353\266\204\353\246\254\343\205\205\343\204\261V4.bsdesign" "b/\353\266\204\353\246\254\343\205\205\343\204\261V4.bsdesign" index 16886fc..dd790e5 100644 Binary files "a/\353\266\204\353\246\254\343\205\205\343\204\261V4.bsdesign" and "b/\353\266\204\353\246\254\343\205\205\343\204\261V4.bsdesign" differ