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 @@