From 76a02076c93132338fb001ed281440e8270f9015 Mon Sep 17 00:00:00 2001 From: janghanul090801 <25s100@sunrint.hs.kr> Date: Fri, 12 Sep 2025 14:47:48 +0900 Subject: [PATCH] 2025 SSF Public --- .github/workflows/black-check.yml | 68 +++++ .github/workflows/comment-command.yml | 118 ++++++++ .github/workflows/issue_or_pr.yml.disabled | 40 +++ .github/workflows/pr-merge-status.yml | 55 ++++ .github/workflows/pr-review-status.yml | 66 +++++ .gitignore | 232 ++++++++++++++++ Backend/__init__.py | 12 + Backend/core/security.py | 78 ++++++ Backend/router/endpoints/avatar.py | 49 ++++ Backend/router/endpoints/diary.py | 102 +++++++ Backend/router/endpoints/friendship.py | 81 ++++++ Backend/router/endpoints/guestbook.py | 63 +++++ Backend/router/endpoints/letter.py | 79 ++++++ Backend/router/endpoints/photo.py | 117 ++++++++ Backend/router/endpoints/room.py | 110 ++++++++ Backend/router/endpoints/store.py | 48 ++++ Backend/router/endpoints/user.py | 116 ++++++++ Backend/router/router.py | 21 ++ Backend/schemas/__init__.py | 0 Backend/schemas/avatar.py | 106 ++++++++ Backend/schemas/diary.py | 109 ++++++++ Backend/schemas/friendship.py | 59 ++++ Backend/schemas/guestbook.py | 46 ++++ Backend/schemas/letter.py | 47 ++++ Backend/schemas/photo.py | 117 ++++++++ Backend/schemas/room.py | 296 +++++++++++++++++++++ Backend/schemas/user.py | 93 +++++++ Backend/services/__init__.py | 0 Backend/services/avatar_service.py | 74 ++++++ Backend/services/diary_service.py | 144 ++++++++++ Backend/services/friendship_service.py | 142 ++++++++++ Backend/services/guestbook_service.py | 110 ++++++++ Backend/services/letter_service.py | 81 ++++++ Backend/services/photo_service.py | 150 +++++++++++ Backend/services/room_service.py | 149 +++++++++++ Backend/services/store_service.py | 33 +++ Backend/services/user_service.py | 176 ++++++++++++ Backend/tests/__init__.py | 0 Backend/tests/conftest.py | 81 ++++++ Backend/tests/test_avatar.py | 71 +++++ Backend/tests/test_diary.py | 52 ++++ Backend/tests/test_friendship.py | 45 ++++ Backend/tests/test_guestbook.py | 38 +++ Backend/tests/test_letter.py | 32 +++ Backend/tests/test_photo.py | 94 +++++++ Backend/tests/test_room.py | 161 +++++++++++ Backend/tests/test_user.py | 68 +++++ Backend/utils/__init__.py | 0 Backend/utils/db.py | 53 ++++ Backend/utils/default_queries.py | 168 ++++++++++++ Backend/utils/email_processor.py | 75 ++++++ Backend/utils/image_processor.py | 179 +++++++++++++ Backend/utils/queries/__init__.py | 0 Backend/utils/queries/avatar.py | 25 ++ Backend/utils/queries/diary.py | 71 +++++ Backend/utils/queries/friendship.py | 89 +++++++ Backend/utils/queries/guestbook.py | 40 +++ Backend/utils/queries/room.py | 81 ++++++ Backend/utils/queries/user.py | 61 +++++ Backend/utils/run_server.py | 64 +++++ README.md | 49 ++++ api.json | 1 + database.sqlite3 | Bin 0 -> 94208 bytes public/avatar/교복상의.png | Bin 0 -> 294 bytes public/avatar/교복조끼상의.png | Bin 0 -> 297 bytes public/avatar/교복조끼하의남.png | Bin 0 -> 183 bytes public/avatar/교복조끼하의여.png | Bin 0 -> 165 bytes public/avatar/교복하의남.png | Bin 0 -> 186 bytes public/avatar/교복하의여.png | Bin 0 -> 165 bytes public/avatar/남자.png | Bin 0 -> 441 bytes public/avatar/동잠상의.png | Bin 0 -> 270 bytes public/avatar/멜빵바지상의.png | Bin 0 -> 309 bytes public/avatar/멜빵치마상의.png | Bin 0 -> 303 bytes public/avatar/무지개맨투맨상의.png | Bin 0 -> 297 bytes public/avatar/산타상의.png | Bin 0 -> 288 bytes public/avatar/산타하의.png | Bin 0 -> 189 bytes public/avatar/여자.png | Bin 0 -> 549 bytes public/avatar/청바지하의.png | Bin 0 -> 189 bytes public/funiture/검정 노트북1-0.png | Bin 0 -> 244 bytes public/funiture/검정 노트북1-180.png | Bin 0 -> 251 bytes public/funiture/검정 노트북1-270.png | Bin 0 -> 245 bytes public/funiture/검정 노트북1-90.png | Bin 0 -> 264 bytes public/funiture/검정 노트북2-0.png | Bin 0 -> 244 bytes public/funiture/검정 노트북2-180.png | Bin 0 -> 260 bytes public/funiture/검정 노트북2-270.png | Bin 0 -> 248 bytes public/funiture/검정 노트북2-90.png | Bin 0 -> 254 bytes public/funiture/검정 노트북3-0.png | Bin 0 -> 244 bytes public/funiture/검정 노트북3-180.png | Bin 0 -> 254 bytes public/funiture/검정 노트북3-270.png | Bin 0 -> 250 bytes public/funiture/검정 노트북3-90.png | Bin 0 -> 259 bytes public/funiture/나무 탁자-90.png | Bin 0 -> 511 bytes public/funiture/나무탁자-0.png | Bin 0 -> 506 bytes public/funiture/노트북1-0.png | Bin 0 -> 303 bytes public/funiture/노트북1-180.png | Bin 0 -> 269 bytes public/funiture/노트북1-270.png | Bin 0 -> 266 bytes public/funiture/노트북1-90.png | Bin 0 -> 285 bytes public/funiture/노트북2-0.png | Bin 0 -> 303 bytes public/funiture/노트북2-180.png | Bin 0 -> 288 bytes public/funiture/노트북2-270.png | Bin 0 -> 270 bytes public/funiture/노트북2-90.png | Bin 0 -> 285 bytes public/funiture/노트북3-0.png | Bin 0 -> 303 bytes public/funiture/노트북3-180.png | Bin 0 -> 296 bytes public/funiture/노트북3-270.png | Bin 0 -> 263 bytes public/funiture/노트북3-90.png | Bin 0 -> 285 bytes public/funiture/녹색 침대-0.png | Bin 0 -> 674 bytes public/funiture/녹색 침대-180.png | Bin 0 -> 591 bytes public/funiture/녹색 침대-270.png | Bin 0 -> 616 bytes public/funiture/녹색 침대-90.png | Bin 0 -> 677 bytes public/funiture/녹색 탁자.png | Bin 0 -> 427 bytes public/funiture/미니 냉장고-0.png | Bin 0 -> 488 bytes public/funiture/미니 냉장고-180.png | Bin 0 -> 365 bytes public/funiture/미니 냉장고-90.png | Bin 0 -> 480 bytes public/funiture/박스-0.png | Bin 0 -> 628 bytes public/funiture/박스-90.png | Bin 0 -> 612 bytes public/funiture/분홍색 탁자.png | Bin 0 -> 423 bytes public/funiture/빨간 침대-0.png | Bin 0 -> 695 bytes public/funiture/빨간 침대-180.png | Bin 0 -> 650 bytes public/funiture/빨간 침대-270.png | Bin 0 -> 618 bytes public/funiture/빨간 침대-90.png | Bin 0 -> 692 bytes public/funiture/선반-0.png | Bin 0 -> 781 bytes public/funiture/선반-180.png | Bin 0 -> 497 bytes public/funiture/선반-270.png | Bin 0 -> 509 bytes public/funiture/선반-90.png | Bin 0 -> 734 bytes public/funiture/소파-0.png | Bin 0 -> 865 bytes public/funiture/소파-180.png | Bin 0 -> 670 bytes public/funiture/소파-270.png | Bin 0 -> 657 bytes public/funiture/소파-90.png | Bin 0 -> 891 bytes public/funiture/쓰레기통닫힘.png | Bin 0 -> 345 bytes public/funiture/쓰레기통열림.png | Bin 0 -> 595 bytes public/funiture/어항-0.png | Bin 0 -> 824 bytes public/funiture/어항-180.png | Bin 0 -> 842 bytes public/funiture/어항-270.png | Bin 0 -> 819 bytes public/funiture/어항-90.png | Bin 0 -> 816 bytes public/funiture/음료 냉장고-0.png | Bin 0 -> 722 bytes public/funiture/음료 냉장고-180.png | Bin 0 -> 261 bytes public/funiture/음료 냉장고-270.png | Bin 0 -> 261 bytes public/funiture/음료 냉장고-90.png | Bin 0 -> 537 bytes public/funiture/의자-0.png | Bin 0 -> 690 bytes public/funiture/의자-180.png | Bin 0 -> 686 bytes public/funiture/의자-270.png | Bin 0 -> 630 bytes public/funiture/의자-90.png | Bin 0 -> 760 bytes public/funiture/작은 선반-0.png | Bin 0 -> 702 bytes public/funiture/작은 선반-180.png | Bin 0 -> 558 bytes public/funiture/작은 선반-270.png | Bin 0 -> 545 bytes public/funiture/작은 선반-90.png | Bin 0 -> 601 bytes public/funiture/작은 식물.png | Bin 0 -> 922 bytes public/funiture/주황 침대-0.png | Bin 0 -> 700 bytes public/funiture/주황 침대-180.png | Bin 0 -> 618 bytes public/funiture/주황 침대-270.png | Bin 0 -> 659 bytes public/funiture/주황 침대-90.png | Bin 0 -> 697 bytes public/funiture/책장-0.png | Bin 0 -> 1040 bytes public/funiture/책장-180.png | Bin 0 -> 515 bytes public/funiture/책장-270.png | Bin 0 -> 503 bytes public/funiture/책장-90.png | Bin 0 -> 899 bytes public/funiture/큰 식물.png | Bin 0 -> 1138 bytes public/funiture/티비-0.png | Bin 0 -> 521 bytes public/funiture/티비-180.png | Bin 0 -> 416 bytes public/funiture/티비-270.png | Bin 0 -> 391 bytes public/funiture/티비-90.png | Bin 0 -> 376 bytes public/funiture/파란 침대-0.png | Bin 0 -> 680 bytes public/funiture/파란 침대-180.png | Bin 0 -> 595 bytes public/funiture/파란 침대-270.png | Bin 0 -> 621 bytes public/funiture/파란 침대-90.png | Bin 0 -> 673 bytes public/funiture/파란색 탁자.png | Bin 0 -> 423 bytes public/funiture/회색 탁자.png | Bin 0 -> 422 bytes public/funiture/흰 노트북1-0.png | Bin 0 -> 265 bytes public/funiture/흰 노트북1-180.png | Bin 0 -> 235 bytes public/funiture/흰 노트북1-270.png | Bin 0 -> 237 bytes public/funiture/흰 노트북1-90.png | Bin 0 -> 265 bytes public/funiture/흰 노트북2-0.png | Bin 0 -> 265 bytes public/funiture/흰 노트북2-180.png | Bin 0 -> 242 bytes public/funiture/흰 노트북2-270.png | Bin 0 -> 240 bytes public/funiture/흰 노트북2-90.png | Bin 0 -> 265 bytes public/funiture/흰 노트북3-0.png | Bin 0 -> 265 bytes public/funiture/흰 노트북3-180.png | Bin 0 -> 231 bytes public/funiture/흰 노트북3-270.png | Bin 0 -> 233 bytes public/funiture/흰 노트북3-90.png | Bin 0 -> 265 bytes public/funiture/흰색 선반-0.png | Bin 0 -> 749 bytes public/funiture/흰색 선반-180.png | Bin 0 -> 490 bytes public/funiture/흰색 선반-270.png | Bin 0 -> 493 bytes public/funiture/흰색 선반-90.png | Bin 0 -> 718 bytes public/funiture/흰색 작은 선반-0.png | Bin 0 -> 663 bytes public/funiture/흰색 작은 선반-180.png | Bin 0 -> 548 bytes public/funiture/흰색 작은 선반-270.png | Bin 0 -> 543 bytes public/funiture/흰색 작은 선반-90.png | Bin 0 -> 607 bytes public/funiture/흰색 탁자.png | Bin 0 -> 428 bytes public/room/room_1.png | Bin 0 -> 2846 bytes public/room/room_2.png | Bin 0 -> 3958 bytes pytest.ini | 3 + requirements.txt | 28 ++ uploads/profile/2___instar_1753881367.png | Bin 0 -> 293806 bytes uploads/profile/_____1755559451.jpg | Bin 0 -> 97541 bytes 192 files changed, 5016 insertions(+) create mode 100644 .github/workflows/black-check.yml create mode 100644 .github/workflows/comment-command.yml create mode 100644 .github/workflows/issue_or_pr.yml.disabled create mode 100644 .github/workflows/pr-merge-status.yml create mode 100644 .github/workflows/pr-review-status.yml create mode 100644 .gitignore create mode 100644 Backend/__init__.py create mode 100644 Backend/core/security.py create mode 100644 Backend/router/endpoints/avatar.py create mode 100644 Backend/router/endpoints/diary.py create mode 100644 Backend/router/endpoints/friendship.py create mode 100644 Backend/router/endpoints/guestbook.py create mode 100644 Backend/router/endpoints/letter.py create mode 100644 Backend/router/endpoints/photo.py create mode 100644 Backend/router/endpoints/room.py create mode 100644 Backend/router/endpoints/store.py create mode 100644 Backend/router/endpoints/user.py create mode 100644 Backend/router/router.py create mode 100644 Backend/schemas/__init__.py create mode 100644 Backend/schemas/avatar.py create mode 100644 Backend/schemas/diary.py create mode 100644 Backend/schemas/friendship.py create mode 100644 Backend/schemas/guestbook.py create mode 100644 Backend/schemas/letter.py create mode 100644 Backend/schemas/photo.py create mode 100644 Backend/schemas/room.py create mode 100644 Backend/schemas/user.py create mode 100644 Backend/services/__init__.py create mode 100644 Backend/services/avatar_service.py create mode 100644 Backend/services/diary_service.py create mode 100644 Backend/services/friendship_service.py create mode 100644 Backend/services/guestbook_service.py create mode 100644 Backend/services/letter_service.py create mode 100644 Backend/services/photo_service.py create mode 100644 Backend/services/room_service.py create mode 100644 Backend/services/store_service.py create mode 100644 Backend/services/user_service.py create mode 100644 Backend/tests/__init__.py create mode 100644 Backend/tests/conftest.py create mode 100644 Backend/tests/test_avatar.py create mode 100644 Backend/tests/test_diary.py create mode 100644 Backend/tests/test_friendship.py create mode 100644 Backend/tests/test_guestbook.py create mode 100644 Backend/tests/test_letter.py create mode 100644 Backend/tests/test_photo.py create mode 100644 Backend/tests/test_room.py create mode 100644 Backend/tests/test_user.py create mode 100644 Backend/utils/__init__.py create mode 100644 Backend/utils/db.py create mode 100644 Backend/utils/default_queries.py create mode 100644 Backend/utils/email_processor.py create mode 100644 Backend/utils/image_processor.py create mode 100644 Backend/utils/queries/__init__.py create mode 100644 Backend/utils/queries/avatar.py create mode 100644 Backend/utils/queries/diary.py create mode 100644 Backend/utils/queries/friendship.py create mode 100644 Backend/utils/queries/guestbook.py create mode 100644 Backend/utils/queries/room.py create mode 100644 Backend/utils/queries/user.py create mode 100644 Backend/utils/run_server.py create mode 100644 README.md create mode 100644 api.json create mode 100644 database.sqlite3 create mode 100644 public/avatar/교복상의.png create mode 100644 public/avatar/교복조끼상의.png create mode 100644 public/avatar/교복조끼하의남.png create mode 100644 public/avatar/교복조끼하의여.png create mode 100644 public/avatar/교복하의남.png create mode 100644 public/avatar/교복하의여.png create mode 100644 public/avatar/남자.png create mode 100644 public/avatar/동잠상의.png create mode 100644 public/avatar/멜빵바지상의.png create mode 100644 public/avatar/멜빵치마상의.png create mode 100644 public/avatar/무지개맨투맨상의.png create mode 100644 public/avatar/산타상의.png create mode 100644 public/avatar/산타하의.png create mode 100644 public/avatar/여자.png create mode 100644 public/avatar/청바지하의.png create mode 100644 public/funiture/검정 노트북1-0.png create mode 100644 public/funiture/검정 노트북1-180.png create mode 100644 public/funiture/검정 노트북1-270.png create mode 100644 public/funiture/검정 노트북1-90.png create mode 100644 public/funiture/검정 노트북2-0.png create mode 100644 public/funiture/검정 노트북2-180.png create mode 100644 public/funiture/검정 노트북2-270.png create mode 100644 public/funiture/검정 노트북2-90.png create mode 100644 public/funiture/검정 노트북3-0.png create mode 100644 public/funiture/검정 노트북3-180.png create mode 100644 public/funiture/검정 노트북3-270.png create mode 100644 public/funiture/검정 노트북3-90.png create mode 100644 public/funiture/나무 탁자-90.png create mode 100644 public/funiture/나무탁자-0.png create mode 100644 public/funiture/노트북1-0.png create mode 100644 public/funiture/노트북1-180.png create mode 100644 public/funiture/노트북1-270.png create mode 100644 public/funiture/노트북1-90.png create mode 100644 public/funiture/노트북2-0.png create mode 100644 public/funiture/노트북2-180.png create mode 100644 public/funiture/노트북2-270.png create mode 100644 public/funiture/노트북2-90.png create mode 100644 public/funiture/노트북3-0.png create mode 100644 public/funiture/노트북3-180.png create mode 100644 public/funiture/노트북3-270.png create mode 100644 public/funiture/노트북3-90.png create mode 100644 public/funiture/녹색 침대-0.png create mode 100644 public/funiture/녹색 침대-180.png create mode 100644 public/funiture/녹색 침대-270.png create mode 100644 public/funiture/녹색 침대-90.png create mode 100644 public/funiture/녹색 탁자.png create mode 100644 public/funiture/미니 냉장고-0.png create mode 100644 public/funiture/미니 냉장고-180.png create mode 100644 public/funiture/미니 냉장고-90.png create mode 100644 public/funiture/박스-0.png create mode 100644 public/funiture/박스-90.png create mode 100644 public/funiture/분홍색 탁자.png create mode 100644 public/funiture/빨간 침대-0.png create mode 100644 public/funiture/빨간 침대-180.png create mode 100644 public/funiture/빨간 침대-270.png create mode 100644 public/funiture/빨간 침대-90.png create mode 100644 public/funiture/선반-0.png create mode 100644 public/funiture/선반-180.png create mode 100644 public/funiture/선반-270.png create mode 100644 public/funiture/선반-90.png create mode 100644 public/funiture/소파-0.png create mode 100644 public/funiture/소파-180.png create mode 100644 public/funiture/소파-270.png create mode 100644 public/funiture/소파-90.png create mode 100644 public/funiture/쓰레기통닫힘.png create mode 100644 public/funiture/쓰레기통열림.png create mode 100644 public/funiture/어항-0.png create mode 100644 public/funiture/어항-180.png create mode 100644 public/funiture/어항-270.png create mode 100644 public/funiture/어항-90.png create mode 100644 public/funiture/음료 냉장고-0.png create mode 100644 public/funiture/음료 냉장고-180.png create mode 100644 public/funiture/음료 냉장고-270.png create mode 100644 public/funiture/음료 냉장고-90.png create mode 100644 public/funiture/의자-0.png create mode 100644 public/funiture/의자-180.png create mode 100644 public/funiture/의자-270.png create mode 100644 public/funiture/의자-90.png create mode 100644 public/funiture/작은 선반-0.png create mode 100644 public/funiture/작은 선반-180.png create mode 100644 public/funiture/작은 선반-270.png create mode 100644 public/funiture/작은 선반-90.png create mode 100644 public/funiture/작은 식물.png create mode 100644 public/funiture/주황 침대-0.png create mode 100644 public/funiture/주황 침대-180.png create mode 100644 public/funiture/주황 침대-270.png create mode 100644 public/funiture/주황 침대-90.png create mode 100644 public/funiture/책장-0.png create mode 100644 public/funiture/책장-180.png create mode 100644 public/funiture/책장-270.png create mode 100644 public/funiture/책장-90.png create mode 100644 public/funiture/큰 식물.png create mode 100644 public/funiture/티비-0.png create mode 100644 public/funiture/티비-180.png create mode 100644 public/funiture/티비-270.png create mode 100644 public/funiture/티비-90.png create mode 100644 public/funiture/파란 침대-0.png create mode 100644 public/funiture/파란 침대-180.png create mode 100644 public/funiture/파란 침대-270.png create mode 100644 public/funiture/파란 침대-90.png create mode 100644 public/funiture/파란색 탁자.png create mode 100644 public/funiture/회색 탁자.png create mode 100644 public/funiture/흰 노트북1-0.png create mode 100644 public/funiture/흰 노트북1-180.png create mode 100644 public/funiture/흰 노트북1-270.png create mode 100644 public/funiture/흰 노트북1-90.png create mode 100644 public/funiture/흰 노트북2-0.png create mode 100644 public/funiture/흰 노트북2-180.png create mode 100644 public/funiture/흰 노트북2-270.png create mode 100644 public/funiture/흰 노트북2-90.png create mode 100644 public/funiture/흰 노트북3-0.png create mode 100644 public/funiture/흰 노트북3-180.png create mode 100644 public/funiture/흰 노트북3-270.png create mode 100644 public/funiture/흰 노트북3-90.png create mode 100644 public/funiture/흰색 선반-0.png create mode 100644 public/funiture/흰색 선반-180.png create mode 100644 public/funiture/흰색 선반-270.png create mode 100644 public/funiture/흰색 선반-90.png create mode 100644 public/funiture/흰색 작은 선반-0.png create mode 100644 public/funiture/흰색 작은 선반-180.png create mode 100644 public/funiture/흰색 작은 선반-270.png create mode 100644 public/funiture/흰색 작은 선반-90.png create mode 100644 public/funiture/흰색 탁자.png create mode 100644 public/room/room_1.png create mode 100644 public/room/room_2.png create mode 100644 pytest.ini create mode 100644 requirements.txt create mode 100644 uploads/profile/2___instar_1753881367.png create mode 100644 uploads/profile/_____1755559451.jpg diff --git a/.github/workflows/black-check.yml b/.github/workflows/black-check.yml new file mode 100644 index 0000000..cac0448 --- /dev/null +++ b/.github/workflows/black-check.yml @@ -0,0 +1,68 @@ +name: Black Formatter Check + +on: + pull_request: + types: [opened, synchronize, reopened] + +jobs: + black-check: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + - name: Get commit messages + id: commits + run: | + messages=$(gh pr view ${{ github.event.pull_request.number }} --repo ${{ github.repository }} --json commits --jq '.commits[].message') + if echo "$messages" | grep -q "chore: format code with black"; then + echo "skip=true" >> $GITHUB_OUTPUT + else + echo "skip=false" >> $GITHUB_OUTPUT + fi + env: + GH_TOKEN: ${{ secrets.GH_TOKEN }} + + - name: Set up Python 3.x + if: steps.commits.outputs.skip == 'false' + uses: actions/setup-python@v4 + with: + python-version: '3.x' + + - name: Install black + if: steps.commits.outputs.skip == 'false' + run: pip install black + + - name: Run black --check + if: steps.commits.outputs.skip == 'false' + id: black-check + run: | + black . --check + continue-on-error: true + + - name: Comment on PR (success) + if: steps.commits.outputs.skip == 'false' && steps.black-check.outcome == 'success' + uses: actions/github-script@v6 + with: + github-token: ${{ secrets.GH_TOKEN }} + script: | + github.rest.issues.createComment({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: context.issue.number, + body: "> [!NOTE]\n> 🎉 Black 포매팅 검사가 성공적으로 완료되었어요.\n`/review`로 리뷰를 요청하실 수 있어요." + }) + + - name: Comment on PR (failure) + if: steps.commits.outputs.skip == 'false' && steps.black-check.outcome == 'failure' + uses: actions/github-script@v6 + with: + github-token: ${{ secrets.GH_TOKEN }} + script: | + github.rest.issues.createComment({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: context.issue.number, + body: "> [!WARNING]\n> 😢 코드 포매팅이 필요해요.\n`black .` 명령어로 코드를 포매팅하거나 `/format` 명령어를 사용해 주세요." + }) diff --git a/.github/workflows/comment-command.yml b/.github/workflows/comment-command.yml new file mode 100644 index 0000000..d6dccde --- /dev/null +++ b/.github/workflows/comment-command.yml @@ -0,0 +1,118 @@ +name: PR Comment Commands + +on: + issue_comment: + types: [created] + +jobs: + format: + if: > + startsWith(github.event.comment.body, '/format') && + github.event.issue.pull_request != null && + !contains(github.event.comment.body, '[!NOTE]') + runs-on: ubuntu-latest + + permissions: + contents: write + + steps: + - name: Checkout PR branch + uses: actions/checkout@v3 + with: + ref: refs/pull/${{ github.event.issue.number }}/head + token: ${{ secrets.GH_TOKEN }} + + - name: Set up Python 3.x + uses: actions/setup-python@v4 + with: + python-version: '3.x' + + - name: Install black + run: pip install black + + - name: Run black + run: black . + + - name: Get PR branch name + id: get_pr_branch + uses: actions/github-script@v6 + with: + github-token: ${{ secrets.GH_TOKEN }} + script: | + const pr = await github.rest.pulls.get({ + owner: context.repo.owner, + repo: context.repo.repo, + pull_number: context.issue.number + }); + core.setOutput('branch', pr.data.head.ref); + + - name: Commit & Push if changed + env: + PR_BRANCH: ${{ steps.get_pr_branch.outputs.branch }} + run: | + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + + if [ -n "$(git status --porcelain)" ]; then + git add . + git commit -m "chore: format code with black" + git push origin HEAD:${PR_BRANCH} + else + echo "No changes to commit." + fi + + - name: Comment on PR + uses: actions/github-script@v6 + with: + github-token: ${{ secrets.GH_TOKEN }} + script: | + github.rest.issues.createComment({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: context.issue.number, + body: "> [!NOTE]\n> 코드 포매팅이 완료되었어요." + }) + + review: + if: > + startsWith(github.event.comment.body, '/review') && + github.event.issue.pull_request != null && + !contains(github.event.comment.body, '[!NOTE]') + runs-on: ubuntu-latest + + permissions: + contents: write + pull-requests: write + + steps: + - name: Label PR as "review required" + uses: actions/github-script@v6 + with: + github-token: ${{ secrets.GH_TOKEN }} + script: | + github.rest.issues.addLabels({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: context.issue.number, + labels: ["status: review required"] + }) + - name: Request reviewers + uses: actions/github-script@v6 + with: + github-token: ${{ secrets.GH_TOKEN }} + script: | + const pr = await github.rest.pulls.get({ + owner: context.repo.owner, + repo: context.repo.repo, + pull_number: context.issue.number + }); + const submitter = pr.data.head.user.login; + const reviewers = ["norhu1130", "janghanul090801"].filter(r => r !== submitter); + if (reviewers.length > 0) { + await github.rest.pulls.requestReviewers({ + owner: context.repo.owner, + repo: context.repo.repo, + pull_number: context.issue.number, + reviewers + }); + } diff --git a/.github/workflows/issue_or_pr.yml.disabled b/.github/workflows/issue_or_pr.yml.disabled new file mode 100644 index 0000000..e1d30db --- /dev/null +++ b/.github/workflows/issue_or_pr.yml.disabled @@ -0,0 +1,40 @@ +name: Issue or PR Label + +on: + pull_request: + types: [opened] + issues: + types: [opened] + +jobs: + add-label: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + - name: Check if issue or PR is opened + id: check + run: | + if [[ "${{ github.event_name }}" == "issues" ]]; then + echo "type=issue" >> $GITHUB_OUTPUT + elif [[ "${{ github.event_name }}" == "pull_request" ]]; then + echo "type=pull_request" >> $GITHUB_OUTPUT + else + echo "type=unknown" >> $GITHUB_OUTPUT + fi + + - name: Add label to issue or PR + if: steps.check.outputs.type == 'issue' || steps.check.outputs.type == 'pull_request' + uses: actions/github-script@v6 + with: + github-token: ${{ secrets.GH_TOKEN }} + script: | + const label = steps.check.outputs.type === 'issue' ? 'type: issue' : 'type: pull request'; + await github.rest.issues.addLabels({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: context.issue.number, + labels: [label] + }); \ No newline at end of file diff --git a/.github/workflows/pr-merge-status.yml b/.github/workflows/pr-merge-status.yml new file mode 100644 index 0000000..6b52705 --- /dev/null +++ b/.github/workflows/pr-merge-status.yml @@ -0,0 +1,55 @@ +name: PR Status - When Merged + +on: + pull_request: + types: [closed] + +jobs: + handle-merge: + # PR이 closed 되었을 때, merged 여부를 검사하여 merged=true인 경우에만 실행 + if: github.event.pull_request.merged == true + runs-on: ubuntu-latest + permissions: + contents: write + + steps: + - name: Update status to done + uses: actions/github-script@v6 + with: + github-token: ${{ secrets.GH_TOKEN }} + script: | + const prNumber = context.payload.pull_request.number; + + const labelsToRemove = [ + "status: in progress", + "status: review required", + "status: change required", + "status: waiting merge" + ]; + + const { data: currentLabels } = await github.rest.issues.listLabelsOnIssue({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: prNumber + }); + + for (const labelName of labelsToRemove) { + if (currentLabels.some(l => l.name === labelName)) { + await github.rest.issues.removeLabel({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: prNumber, + name: labelName + }).catch(err => { + if (err.status !== 404) throw err; + }); + } + } + + // 병합이 완료된 PR에 "status: done" 라벨을 부착 + await github.rest.issues.addLabels({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: prNumber, + labels: ["status: done"] + }); \ No newline at end of file diff --git a/.github/workflows/pr-review-status.yml b/.github/workflows/pr-review-status.yml new file mode 100644 index 0000000..bfa0482 --- /dev/null +++ b/.github/workflows/pr-review-status.yml @@ -0,0 +1,66 @@ +name: PR Status - Review Outcome + +on: + pull_request_review: + types: [submitted] + +jobs: + handle-review-outcome: + runs-on: ubuntu-latest + permissions: + contents: write + + steps: + - name: Handle review outcomes + uses: actions/github-script@v6 + with: + github-token: ${{ secrets.GH_TOKEN }} + script: | + const prNumber = context.payload.pull_request.number; + + const labelInProgress = "status: in progress"; + const labelReviewReq = "status: review required"; + const labelChangeReq = "status: change required"; + const labelWaitingMerge = "status: waiting merge"; + + const labelsToRemove = [ + labelInProgress, + labelReviewReq, + labelChangeReq, + labelWaitingMerge + ]; + + const { data: currentLabels } = await github.rest.issues.listLabelsOnIssue({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: prNumber + }); + + for (const labelName of labelsToRemove) { + if (currentLabels.some(l => l.name === labelName)) { + await github.rest.issues.removeLabel({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: prNumber, + name: labelName + }).catch(err => { + if (err.status !== 404) throw err; + }); + } + } + + if (context.payload.review.state === "approved") { + await github.rest.issues.addLabels({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: prNumber, + labels: [labelWaitingMerge] + }); + } else if (context.payload.review.state === "changes_requested") { + await github.rest.issues.addLabels({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: prNumber, + labels: [labelChangeReq] + }); + } \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1e0a72e --- /dev/null +++ b/.gitignore @@ -0,0 +1,232 @@ +__pycache__# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# UV +# Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control. +# This is especially recommended for binary packages to ensure reproducibility, and is more +# commonly ignored for libraries. +#uv.lock + +# poetry +# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. +# This is especially recommended for binary packages to ensure reproducibility, and is more +# commonly ignored for libraries. +# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control +#poetry.lock + +# pdm +# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. +#pdm.lock +# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it +# in version control. +# https://pdm.fming.dev/latest/usage/project/#working-with-version-control +.pdm.toml +.pdm-python +.pdm-build/ + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ + +# PyCharm +# JetBrains specific template is maintained in a separate JetBrains.gitignore that can +# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore +# and can be added to the global gitignore or merged into this file. For a more nuclear +# option (not recommended) you can uncomment the following to ignore the entire idea folder. +.idea/ + +# Abstra +# Abstra is an AI-powered process automation framework. +# Ignore directories containing user credentials, local state, and settings. +# Learn more at https://abstra.io/docs +.abstra/ + +# Visual Studio Code +# Visual Studio Code specific template is maintained in a separate VisualStudioCode.gitignore +# that can be found at https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore +# and can be added to the global gitignore or merged into this file. However, if you prefer, +# you could uncomment the following to ignore the entire vscode folder +# .vscode/ + +# Ruff stuff: +.ruff_cache/ + +# PyPI configuration file +.pypirc + +# Cursor +# Cursor is an AI-powered code editor. `.cursorignore` specifies files/directories to +# exclude from AI features like autocomplete and code analysis. Recommended for sensitive data +# refer to https://docs.cursor.com/context/ignore-files +.cursorignore +.cursorindexingignore + +# Created by https://www.toptal.com/developers/gitignore/api/macos +# Edit at https://www.toptal.com/developers/gitignore?templates=macos + +### macOS ### +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +### macOS Patch ### +# iCloud generated files +*.icloud + +# End of https://www.toptal.com/developers/gitignore/api/macos diff --git a/Backend/__init__.py b/Backend/__init__.py new file mode 100644 index 0000000..5d3f802 --- /dev/null +++ b/Backend/__init__.py @@ -0,0 +1,12 @@ +from .router.router import router +import sys +from pathlib import Path +from Backend.utils.run_server import init_FastAPI + +# 프로젝트 루트를 Python 경로에 추가 +project_root = Path(__file__).parent +sys.path.insert(0, str(project_root)) + +app = init_FastAPI() + +app.include_router(router) diff --git a/Backend/core/security.py b/Backend/core/security.py new file mode 100644 index 0000000..c5866cf --- /dev/null +++ b/Backend/core/security.py @@ -0,0 +1,78 @@ +from jose import jwt, JWTError +from datetime import datetime, timedelta +from fastapi import Depends, HTTPException, status +from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials +from typing import Optional + +ACCESS_TOKEN_EXPIRE_MINUTES = 30 + +SECRET_KEY = "WIXYAhAfU6tLOloxqHgI4thAAo6kshkK" +ALGORITHM = "HS256" + +security = HTTPBearer() + + +def create_access_token(data: dict): + to_encode = data.copy() + expire = datetime.now() + timedelta(minutes=ACCESS_TOKEN_EXPIRE_MINUTES) + to_encode.update({"exp": expire}) + encoded_jwt = jwt.encode(to_encode, SECRET_KEY, algorithm=ALGORITHM) + return encoded_jwt + + +def verify_token(token: str) -> Optional[dict]: + try: + payload = jwt.decode(token, SECRET_KEY, algorithms=[ALGORITHM]) + return payload + except JWTError: + return None + + +async def get_current_user( + credentials: HTTPAuthorizationCredentials = Depends(security), +): + from ..schemas.user import User + from ..utils.db import fetch_one + + credentials_exception = HTTPException( + status_code=status.HTTP_401_UNAUTHORIZED, + detail="Could not validate credentials", + headers={"WWW-Authenticate": "Bearer"}, + ) + + try: + payload = verify_token(credentials.credentials) + if payload is None: + raise credentials_exception + + username: str = payload.get("sub") + if username is None: + raise credentials_exception + + except JWTError: + raise credentials_exception + + # 데이터베이스에서 사용자 조회 + user_row = await fetch_one("SELECT * FROM users WHERE username = ?", (username,)) + + if user_row is None: + raise credentials_exception + + user = User( + id=user_row["id"], + username=user_row["username"], + email=user_row["email"], + password_hash=user_row["password_hash"], + salt=user_row["salt"], + created_at=user_row["created_at"], + profile_image_path=user_row["profile_image_path"], + is_active=user_row["is_active"], + ) + + return user + + +async def get_current_active_user(current_user=Depends(get_current_user)): + if not current_user.is_active: + raise HTTPException(status_code=400, detail="Inactive user") + return current_user diff --git a/Backend/router/endpoints/avatar.py b/Backend/router/endpoints/avatar.py new file mode 100644 index 0000000..ee4b48e --- /dev/null +++ b/Backend/router/endpoints/avatar.py @@ -0,0 +1,49 @@ +from fastapi import APIRouter, HTTPException, Depends +from ...schemas.avatar import ( + AvatarUpdate, + AvatarResponse, + AvatarOptions, +) +from ...services.avatar_service import AvatarService +from ...core.security import get_current_user +from ...schemas.user import User + +router = APIRouter(prefix="/avatar", tags=["avatar"]) +avatar_service = AvatarService() + + +@router.get("", response_model=AvatarResponse) +async def get_my_avatar( + current_user: User = Depends(get_current_user), +) -> AvatarResponse: + try: + avatar = await avatar_service.get_or_create_avatar(current_user.id) + return avatar.to_response() + except Exception as e: + raise HTTPException(status_code=400, detail=str(e)) + + +@router.put("", response_model=AvatarResponse) +async def update_avatar( + avatar_data: AvatarUpdate, current_user: User = Depends(get_current_user) +) -> AvatarResponse: + try: + avatar = await avatar_service.update_avatar(current_user.id, avatar_data) + return avatar.to_response() + except Exception as e: + raise HTTPException(status_code=400, detail=str(e)) + + +@router.get("/options", response_model=AvatarOptions) +async def get_avatar_options() -> AvatarOptions: + try: + return await avatar_service.get_avatar_options() + except Exception as e: + raise HTTPException(status_code=400, detail=str(e)) + +@router.get("/{user_id}", response_model=AvatarResponse) +async def get_avatar_by_userId(user_id: int) -> AvatarResponse: + avatar = await avatar_service.get_avatar_by_userId(user_id) + if not avatar: + raise HTTPException(status_code=404, detail="Avatar not found") + return avatar.to_response() diff --git a/Backend/router/endpoints/diary.py b/Backend/router/endpoints/diary.py new file mode 100644 index 0000000..e01a508 --- /dev/null +++ b/Backend/router/endpoints/diary.py @@ -0,0 +1,102 @@ +from fastapi import ( + APIRouter, + HTTPException, + Depends, + UploadFile, + File, +) +from typing import List, Optional +from ...schemas.diary import DiaryCreate, DiaryUpdate, DiaryResponse, Diary +from ...services.diary_service import DiaryService +from ...core.security import get_current_user +from ...schemas.user import User + +router = APIRouter(prefix="/diary", tags=["diary"]) +diary_service = DiaryService() + + +@router.post("", response_model=DiaryResponse) +async def create_diary( + diary_data: DiaryCreate = Depends(DiaryCreate.as_form), + file: List[UploadFile] = File(default=None), + current_user: User = Depends(get_current_user), +) -> DiaryResponse: + try: + diary = await diary_service.create_diary(current_user.id, diary_data, file) + return diary.to_response() + except Exception as e: + raise HTTPException(status_code=400, detail=str(e)) + + +@router.get("", response_model=List[DiaryResponse]) +async def get_user_diaries( + skip: int = 0, + limit: int = 20, + category: Optional[str] = None, + current_user: User = Depends(get_current_user), +) -> List[DiaryResponse]: + try: + diaries = await diary_service.get_user_diaries( + current_user.id, skip, limit, category + ) + return [diary.to_response() for diary in diaries] + except Exception as e: + raise HTTPException(status_code=400, detail=str(e)) + + +@router.get("/w/{target_user_id}", response_model=List[DiaryResponse]) +async def get_target_user_diaries( + target_user_id: int, + skip: int = 0, + limit: int = 20, + category: Optional[str] = None, +) -> List[DiaryResponse]: + try: + diaries = await diary_service.get_user_diaries( + target_user_id, skip, limit, category + ) + return [diary.to_response() for diary in diaries] + except Exception as e: + raise HTTPException(status_code=400, detail=str(e)) + + +@router.get("/{diary_id}", response_model=DiaryResponse) +async def get_diary(diary_id: int) -> DiaryResponse: + try: + diary = await diary_service.get_diary_by_id(diary_id) + if not diary: + raise HTTPException(status_code=404, detail="Diary not found") + return diary.to_response() + except Exception as e: + raise HTTPException(status_code=400, detail=str(e)) + + +@router.put("/{diary_id}", response_model=DiaryResponse) +async def update_diary( + diary_id: int, + diary_data: DiaryUpdate = Depends(DiaryUpdate.as_form), + file: List[UploadFile] = File(default=None), + current_user: User = Depends(get_current_user), +) -> DiaryResponse: + try: + diary = await diary_service.update_diary( + diary_id, current_user.id, diary_data, file + ) + if not diary: + raise HTTPException(status_code=404, detail="Diary not found") + return diary.to_response() + except Exception as e: + raise HTTPException(status_code=400, detail=str(e)) + + +@router.delete("/{diary_id}") +async def delete_diary( + diary_id: int, current_user: User = Depends(get_current_user) +) -> dict: + try: + success = await diary_service.delete_diary(diary_id, current_user.id) + if not success: + raise HTTPException(status_code=404, detail="Diary not found") + return {"message": "Diary deleted successfully"} + except Exception as e: + raise HTTPException(status_code=400, detail=str(e)) diff --git a/Backend/router/endpoints/friendship.py b/Backend/router/endpoints/friendship.py new file mode 100644 index 0000000..a3b4beb --- /dev/null +++ b/Backend/router/endpoints/friendship.py @@ -0,0 +1,81 @@ +from fastapi import APIRouter, HTTPException, Depends +from typing import List, Optional +from ...schemas.friendship import ( + FriendshipRequest, + FriendshipResponse, +) +from ...services.friendship_service import FriendshipService +from ...core.security import get_current_user +from ...schemas.user import User + +router = APIRouter(prefix="/friendship", tags=["friendship"]) +friendship_service = FriendshipService() + + +@router.post("/request", response_model=FriendshipResponse) +async def send_friendship_request( + request_data: FriendshipRequest, current_user: User = Depends(get_current_user) +) -> FriendshipResponse: + try: + friendship = await friendship_service.send_friendship_request( + current_user.id, request_data.friend_username + ) + return friendship + except Exception as e: + raise HTTPException(status_code=400, detail=str(e)) + + +@router.put("/{friendship_id}/accept", response_model=FriendshipResponse) +async def accept_friendship_request( + friendship_id: int, current_user: User = Depends(get_current_user) +) -> FriendshipResponse: + try: + friendship = await friendship_service.accept_friendship_request( + friendship_id, current_user.id + ) + if not friendship: + raise HTTPException(status_code=404, detail="Friendship request not found") + return friendship + except Exception as e: + raise HTTPException(status_code=400, detail=str(e)) + + +@router.get("", response_model=List[FriendshipResponse]) +async def get_friendships( + status: Optional[str] = None, current_user: User = Depends(get_current_user) +) -> List[FriendshipResponse]: + try: + friendships = await friendship_service.get_user_friendships( + current_user.id, status + ) + return friendships + except Exception as e: + raise HTTPException(status_code=400, detail=str(e)) + + +@router.delete("/{friendship_id}") +async def delete_friendship( + friendship_id: int, current_user: User = Depends(get_current_user) +) -> dict: + try: + success = await friendship_service.delete_friendship( + friendship_id, current_user.id + ) + if not success: + raise HTTPException(status_code=404, detail="Friendship not found") + return {"message": "Friendship deleted successfully"} + except Exception as e: + raise HTTPException(status_code=400, detail=str(e)) + + +@router.get("/pending", response_model=List[FriendshipResponse]) +async def get_pending_requests( + current_user: User = Depends(get_current_user), +) -> List[FriendshipResponse]: + try: + pending_requests = await friendship_service.get_pending_requests( + current_user.id + ) + return pending_requests + except Exception as e: + raise HTTPException(status_code=400, detail=str(e)) diff --git a/Backend/router/endpoints/guestbook.py b/Backend/router/endpoints/guestbook.py new file mode 100644 index 0000000..9246638 --- /dev/null +++ b/Backend/router/endpoints/guestbook.py @@ -0,0 +1,63 @@ +from typing import List +from fastapi import APIRouter, HTTPException, Depends, status +from Backend.core.security import get_current_user +from Backend.schemas.guestbook import ( + GuestBookCreate, + GuestbookUpdate, + GuestbookResponse, +) +from Backend.schemas.user import User +from Backend.services.guestbook_service import GuestbookService + +router = APIRouter(prefix="/guestbook", tags=["guestbook"]) + +guestbook_service = GuestbookService() + + +@router.post("", status_code=status.HTTP_201_CREATED, response_model=GuestbookResponse) +async def create_guestbook( + guestbook: GuestBookCreate, current_user: User = Depends(get_current_user) +) -> GuestbookResponse: + try: + response = await guestbook_service.create_guestbook(guestbook, current_user) + return response + except Exception as e: + raise HTTPException(status_code=400, detail=str(e)) + + +@router.get("/{target_user_id}", response_model=List[GuestbookResponse]) +async def get_guestbook(target_user_id: int): + try: + response = await guestbook_service.get_target_user_guestbooks(target_user_id) + response.reverse() + return response + except Exception as e: + raise HTTPException(status_code=400, detail=str(e)) + + +@router.put("/{id}", response_model=GuestbookResponse) +async def update_guestbook( + id: int, + guestbook: GuestbookUpdate, +) -> GuestbookResponse: + try: + response = await guestbook_service.update_guestbook_by_id(id, guestbook.content) + return response + except Exception as e: + raise HTTPException(status_code=400, detail=str(e)) + + +@router.delete("/{id}") +async def delete_guestbook( + id: int, + user: User = Depends(get_current_user), +) -> dict: + try: + is_success = await guestbook_service.delete_guestbook_by_id(id, user.id) + if is_success: + return {"detail": "success"} + else: + raise HTTPException(status_code=404, detail="guestbook not found") + + except Exception as e: + raise HTTPException(status_code=400, detail=str(e)) diff --git a/Backend/router/endpoints/letter.py b/Backend/router/endpoints/letter.py new file mode 100644 index 0000000..ee784e6 --- /dev/null +++ b/Backend/router/endpoints/letter.py @@ -0,0 +1,79 @@ +# from fastapi import APIRouter, HTTPException, Depends +# +# from ...schemas.letter import LetterCreate, LetterResponse, EmailRequest +# from ...services.letter_service import LetterService +# from ...core.security import get_current_user +# from ...schemas.user import User +# +# router = APIRouter(prefix="/letter", tags=["letter"]) +# letter_service = LetterService() +# +# +# @router.post("", response_model=LetterResponse) +# async def create_letter( +# letter_data: LetterCreate, +# current_user: User = Depends(get_current_user), +# ) -> LetterResponse: +# try: +# letter = await letter_service.create_letter(current_user.id, letter_data) +# return letter.to_response() +# except Exception as e: +# raise HTTPException(status_code=400, detail=str(e)) +# +# +# @router.get("/{letter_id}", response_model=LetterResponse) +# async def get_letter( +# letter_id: int, current_user: User = Depends(get_current_user) +# ) -> LetterResponse: +# try: +# letter = await letter_service.get_letter_by_id(letter_id, current_user.id) +# if not letter: +# raise HTTPException(status_code=404, detail="Letter not found") +# return letter.to_response() +# except Exception as e: +# raise HTTPException(status_code=400, detail=str(e)) +# +# +# @router.delete("/{letter_id}") +# async def delete_letter(letter_id: int, current_user: User = Depends(get_current_user)): +# try: +# is_success = await letter_service.delete_letter(letter_id, current_user.id) +# if not is_success: +# raise HTTPException(status_code=404, detail="Letter not found") +# return {"detail": "Letter deleted"} +# except Exception as e: +# raise HTTPException(status_code=400, detail=str(e)) +# +# +# @router.put("/{letter_id}", response_model=LetterResponse) +# async def update_letter( +# letter_id: int, +# letter_data: LetterCreate, +# current_user: User = Depends(get_current_user), +# ): +# try: +# letter = await letter_service.update_letter( +# letter_id, current_user.id, letter_data.content +# ) +# if not letter: +# raise HTTPException(status_code=404, detail="Letter not found") +# return letter.to_response() +# except Exception as e: +# raise HTTPException(status_code=400, detail=str(e)) +# +# +# @router.post("/{letter_id}/send") +# async def send_letter( +# letter_id: int, +# letter_data: EmailRequest, +# current_user: User = Depends(get_current_user), +# ): +# try: +# letter = await letter_service.get_letter_by_id(letter_id, current_user.id) +# if not letter: +# raise HTTPException(status_code=404, detail="Letter not found") +# +# await letter_service.send_letter(letter, letter_data) +# return {"message": "Email sent successfully!"} +# except Exception as e: +# raise HTTPException(status_code=400, detail=str(e)) diff --git a/Backend/router/endpoints/photo.py b/Backend/router/endpoints/photo.py new file mode 100644 index 0000000..412ed79 --- /dev/null +++ b/Backend/router/endpoints/photo.py @@ -0,0 +1,117 @@ +# from fastapi import APIRouter, HTTPException, Depends, UploadFile, File, Query, Form +# from typing import List +# from ...schemas.photo import ( +# PhotoUpload, +# PhotoResponse, +# CommentCreate, +# CommentResponse, +# FilterRequest, +# ) +# from ...services.photo_service import PhotoService +# from ...core.security import get_current_user +# from ...schemas.user import User +# from pydantic import ValidationError +# +# router = APIRouter(prefix="/photo", tags=["photo"]) +# photo_service = PhotoService() +# +# +# @router.post("/upload", response_model=PhotoResponse) +# async def upload_photo( +# photo_data: UploadFile = Form(...), +# file: UploadFile = File(...), +# current_user: User = Depends(get_current_user), +# ) -> PhotoResponse: +# import json +# +# try: +# photo_data_bytes = await photo_data.read() +# photo_info = json.loads(photo_data_bytes.decode("utf-8")) +# photo_data = PhotoUpload(**photo_info) +# except (json.JSONDecodeError, ValidationError) as e: +# raise HTTPException(status_code=400, detail="Invalid photo data format") +# try: +# photo = await photo_service.upload_photo(current_user.id, photo_data, file) +# return photo.to_response() +# except Exception as e: +# raise HTTPException(status_code=400, detail=str(e)) +# +# +# @router.get("", response_model=List[PhotoResponse]) +# async def get_user_photos( +# skip: int = 0, +# limit: int = 20, +# album_name: str = None, +# current_user: User = Depends(get_current_user), +# ) -> List[PhotoResponse]: +# try: +# photos = await photo_service.get_user_photos( +# current_user.id, skip, limit, album_name +# ) +# return [photo.to_response() for photo in photos] +# except Exception as e: +# raise HTTPException(status_code=400, detail=str(e)) +# +# +# @router.post("/{photo_id}/comment", response_model=CommentResponse) +# async def add_photo_comment( +# photo_id: int, +# comment_data: CommentCreate, +# current_user: User = Depends(get_current_user), +# ) -> CommentResponse: +# try: +# is_friend = await photo_service.check_friendship(current_user.id, photo_id) +# if not is_friend: +# raise HTTPException( +# status_code=403, detail="Only friends can comment on photos" +# ) +# +# comment = await photo_service.add_comment( +# photo_id, current_user.id, comment_data +# ) +# return comment.to_response(current_user.username) +# except Exception as e: +# raise HTTPException(status_code=400, detail=str(e)) +# +# +# @router.get("/{photo_id}/comments", response_model=List[CommentResponse]) +# async def get_photo_comments( +# photo_id: int, current_user: User = Depends(get_current_user) +# ) -> List[CommentResponse]: +# try: +# comments = await photo_service.get_photo_comments(photo_id) +# return comments +# except Exception as e: +# raise HTTPException(status_code=400, detail=str(e)) +# +# +# @router.post("/edit-filter") +# async def apply_photo_filter( +# filter_request: FilterRequest, current_user: User = Depends(get_current_user) +# ) -> dict: +# if filter_request.cover and filter_request.title is None: +# raise HTTPException(status_code=400, detail="title must be Not Null") +# try: +# filtered_image_path = await photo_service.apply_filter( +# filter_request.photo_id, +# filter_request.filter_type, +# current_user.id, +# filter_request.cover, +# filter_request.title, +# ) +# return {"filtered_image_path": filtered_image_path} +# except Exception as e: +# raise HTTPException(status_code=400, detail=str(e)) +# +# +# @router.delete("/{photo_id}") +# async def delete_photo( +# photo_id: int, current_user: User = Depends(get_current_user) +# ) -> dict: +# try: +# success = await photo_service.delete_photo(photo_id, current_user.id) +# if not success: +# raise HTTPException(status_code=404, detail="Photo not found") +# return {"message": "Photo deleted successfully"} +# except Exception as e: +# raise HTTPException(status_code=400, detail=str(e)) diff --git a/Backend/router/endpoints/room.py b/Backend/router/endpoints/room.py new file mode 100644 index 0000000..d654ea3 --- /dev/null +++ b/Backend/router/endpoints/room.py @@ -0,0 +1,110 @@ +from fastapi import APIRouter, Depends, HTTPException +from typing import List +from Backend.schemas.room import ( + FurnitureItem, + RoomFurniturePlacement, + FurniturePlacementRequest, + RoomNameUpdateRequest, + UpdateRoomTypeRequest, + RoomResponse, + RoomTypeResponse, + RoomFurnitureResponse, +) +from Backend.schemas.user import User +from Backend.core.security import get_current_user +from Backend.services.room_service import RoomService + +router = APIRouter(prefix="/room", tags=["room"]) +room_service = RoomService() + + +@router.get("/catalog", response_model=List[FurnitureItem]) +async def get_furniture_catalog() -> List[FurnitureItem]: + return await room_service.get_furniture_catalog() + + +@router.get("/layout", response_model=RoomFurnitureResponse) +async def get_my_room_layout(current_user: User = Depends(get_current_user)): + room_id = await room_service.get_or_create_room(current_user.id) + return await room_service.get_room_furnitures(room_id) + + +@router.get("/layout/{user_id}", response_model=RoomFurnitureResponse) +async def get_user_room_layout(user_id: int) -> RoomFurnitureResponse: + room_id = await room_service.get_or_create_room(user_id) + return await room_service.get_room_furnitures(room_id) + + +@router.post("/furniture") +async def place_furniture( + request: FurniturePlacementRequest, current_user: User = Depends(get_current_user) +): + room_id = await room_service.get_or_create_room(current_user.id) + try: + await room_service.place_furniture(room_id, request) + return {"message": "Furniture placed successfully"} + except Exception as e: + raise HTTPException(status_code=400, detail=str(e)) + + +@router.delete("/furniture") +async def remove_furniture( + x: int, y: int, furniture_name: str, current_user: User = Depends(get_current_user) +): + room_id = await room_service.get_or_create_room(current_user.id) + await room_service.remove_furniture(room_id, x, y, furniture_name) + return {"message": "Furniture removed successfully"} + + +@router.put("/") +async def update_room_name( + data: RoomNameUpdateRequest, current_user: User = Depends(get_current_user) +): + try: + room_id = await room_service.get_or_create_room(current_user.id) + await room_service.update_room_name(room_id, data.new_name) + return {"message": "Room name updated successfully"} + except Exception as e: + raise HTTPException(status_code=400, detail=str(e)) + + +@router.get("/") +async def get_my_room(current_user: User = Depends(get_current_user)) -> RoomResponse: + try: + room_id = await room_service.get_or_create_room(current_user.id) + return (await room_service.get_room_by_id(room_id)).to_response() + except Exception as e: + raise HTTPException(status_code=400, detail=str(e)) + + +@router.get("/types") +async def get_room_types() -> List[RoomTypeResponse]: + return await room_service.get_room_types() + + +@router.patch("/") +async def update_room_type( + data: UpdateRoomTypeRequest, current_user: User = Depends(get_current_user) +) -> RoomResponse: + try: + room_id = await room_service.get_or_create_room(current_user.id) + return (await room_service.update_room_type(room_id, data.type)).to_response() + except Exception as e: + raise HTTPException(status_code=400, detail=str(e)) + + +@router.get("/my") +async def get_my_furniture(current_user: User = Depends(get_current_user)): + try: + list_ = await room_service.get_user_furniture(current_user.id) + return list_ + except Exception as e: + raise HTTPException(status_code=400, detail=str(e)) + +@router.get("/{user_id}", response_model=RoomResponse) +async def get_room_by_userId(user_id: int) -> RoomResponse: + try: + room = await room_service.get_room_by_userId(user_id) + return room.to_response() + except Exception as e: + raise HTTPException(status_code=400, detail=str(e)) \ No newline at end of file diff --git a/Backend/router/endpoints/store.py b/Backend/router/endpoints/store.py new file mode 100644 index 0000000..b2f79fa --- /dev/null +++ b/Backend/router/endpoints/store.py @@ -0,0 +1,48 @@ +from fastapi import APIRouter, Depends, HTTPException +from ...core.security import get_current_user +from ...schemas.user import User +from Backend.services.store_service import StoreService +from ...services.room_service import RoomService + +router = APIRouter(prefix="/store", tags=["store"]) +store_service = StoreService() +room_service = RoomService() + + +@router.get("") +async def get_dotory( + current_user: User = Depends(get_current_user), +): + try: + dotory = await store_service.get_dotory_by_id(current_user.id) + return {"dotory": dotory} + except Exception as e: + raise HTTPException(status_code=400, detail=str(e)) + + +@router.post("/{product_id}") +async def buy_product( + product_id: int, + product_name: str, + current_user: User = Depends(get_current_user), +): + try: + response = await store_service.buy_product(product_id, current_user.id) + if response["isSuccess"]: + await room_service.add_furniture(current_user.id, product_name) + return {"dotory": response["dotory"]} + raise HTTPException(status_code=404, detail="Product not found") + except Exception as e: + raise HTTPException(status_code=400, detail=str(e)) + + +@router.put("") +async def update_dotory( + dotory_num: int, + current_user: User = Depends(get_current_user), +): + try: + dotory = await store_service.update_user_dotory(current_user.id, dotory_num) + return {"dotory": dotory} + except Exception as e: + raise HTTPException(status_code=400, detail=str(e)) diff --git a/Backend/router/endpoints/user.py b/Backend/router/endpoints/user.py new file mode 100644 index 0000000..37078cd --- /dev/null +++ b/Backend/router/endpoints/user.py @@ -0,0 +1,116 @@ +from typing import List + +from fastapi import APIRouter, HTTPException, status, UploadFile, File, Depends +from Backend.schemas.user import UserCreate, UserLogin, UserResponse, User, UserUpdate +from Backend.services.user_service import UserService +from Backend.core.security import create_access_token, get_current_user + +router = APIRouter(prefix="/user", tags=["user"]) + +user_service = UserService() + + +@router.post( + "/register", response_model=UserResponse, status_code=status.HTTP_201_CREATED +) +async def register_user( + user_data: UserCreate = Depends(UserCreate.as_form), + profile_file: UploadFile = File(default=None), +) -> UserResponse: + existing_user = # 작성 # + if existing_user: + raise HTTPException( + status_code=# 작성 # + detail="# 작성 #" + ) + + existing_email = # 작성 # + if existing_email: + raise HTTPException( + status_code=# 작성 # + detail="# 작성 #" + ) + + try: + user = # 작성 # + return user.to_response() + except Exception as e: + raise HTTPException( + status_code= + detail="# 작성 #" + ) + +@router.post("/login") +async def login_user(login_data: UserLogin) -> dict: + user = await user_service.authenticate_user( + + ) + + if not user: + raise HTTPException( + status_code= + detail= + ) + + if not user.is_active: + raise HTTPException( + status_code=, detail="" + ) + + access_token = + + return {"access_token": access_token, "token_type": "bearer"} + + + +@router.get("/profile/{username}", response_model=UserResponse) +async def get_user_profile(username: str) -> UserResponse: + user = await user_service.get_user_by_username(username) + + if not user: + raise HTTPException( + status_code=status.HTTP_404_NOT_FOUND, detail="User not found" + ) + + return user.to_response() + + +@router.get("/me", response_model=UserResponse) +async def get_user_me(user: User = Depends(get_current_user)) -> UserResponse: + return user.to_response() + + +@router.delete("/{username}") +async def delete_user(username: str) -> dict: + is_success = await user_service.delete_user(username) + if not is_success: + raise HTTPException( + status_code=status.HTTP_404_NOT_FOUND, detail="User not found" + ) + return {"detail": "User deleted"} + + +@router.get("/find/{username}", response_model=List[UserResponse]) +async def find_user(username: str) -> List[UserResponse]: + users = await user_service.find_user(username) + return users + + +@router.put("/", response_model=UserResponse) +async def update_user( + current_user: User = Depends(get_current_user), + user_data: UserUpdate = Depends(UserUpdate.as_form), + profile_file: UploadFile = File(default=None), +) -> UserResponse: + try: + updated_user = await user_service.update_user( + user=current_user, user_data=user_data, profile_file=profile_file + ) + return updated_user.to_response() + except ValueError as e: + raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail=str(e)) + except Exception as e: + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=f"Failed to update user: {str(e)}", + ) diff --git a/Backend/router/router.py b/Backend/router/router.py new file mode 100644 index 0000000..dadeafe --- /dev/null +++ b/Backend/router/router.py @@ -0,0 +1,21 @@ +import os +import traceback +from fastapi import APIRouter +from fastapi.logger import logger + + +router = APIRouter() + +for router_file in os.listdir("Backend/router/endpoints"): + try: + if router_file.endswith(".py"): + module_name = "Backend.router.endpoints." + router_file[:-3] + module = __import__(module_name, fromlist=[""]) + router_object = getattr(module, "router") + prefix = getattr(module, "prefix", router_file[:-3]) + + router.include_router(router_object, prefix="/api", tags=[router_file[:-3]]) + print(f"Loaded router: /api/{prefix} - {router_file}") + + except Exception as e: + logger.error(f"Error loading router {router_file}:\n{traceback.format_exc()}") diff --git a/Backend/schemas/__init__.py b/Backend/schemas/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Backend/schemas/avatar.py b/Backend/schemas/avatar.py new file mode 100644 index 0000000..5a4e3ad --- /dev/null +++ b/Backend/schemas/avatar.py @@ -0,0 +1,106 @@ +from pydantic import BaseModel +import enum + + +class AvatarType(str, enum.Enum): + MALE = "남성" + FEMALE = "여성" + + +class TopClothesType(str, enum.Enum): + SCHOOL_CLOTHES = "교복" + SCHOOL_CLOTHES_2 = "교복 조끼" + ANA_CLOTHES = "AnA 동잠" + SUSPENDERS_CLOTHES_1 = "멜빵 바지" + SUSPENDERS_CLOTHES_2 = "멜빵 치마" + RAINBOW_CLOTHES = "무지개 맨투맨" + SANTA_CLOTHES = "산타" + + +class BottomClothesType(str, enum.Enum): + SCHOOL_CLOTHES = "교복 바지" + SCHOOL_CLOTHES_2 = "교복 치마" + SCHOOL_CLOTHES_3 = "교복 조끼 바지" + SCHOOL_CLOTHES_4 = "교복 조끼 치마" + SANTA_CLOTHES = "산타 바지" + JEANS = "청바지" + + +avatar_path_ = {"남성": "public/avatar/남자.png", "여성": "public/avatar/여자.png"} +top_clothe_path_ = { + "교복": "public/avatar/교복상의.png", + "교복 조끼": "public/avatar/교복조끼상의.png", + "AnA 동잠": "public/avatar/동잠상의.png", + "멜빵 바지": "public/avatar/멜빵바지상의.png", + "멜빵 치마": "public/avatar/멜빵치마상의.png", + "무지개 맨투맨": "public/avatar/무지개맨투맨상의.png", + "산타": "public/avatar/산타상의.png", +} +bottom_clothe_path_ = { + "교복 바지": "public/avatar/교복하의남.png", + "교복 치마": "public/avatar/교복하의여.png", + "교복 조끼 바지": "public/avatar/교복조끼하의남.png", + "교복 조끼 치마": "public/avatar/교복조끼하의여.png", + "산타 바지": "public/avatar/산타하의.png", + "청바지": "public/avatar/청바지하의.png", +} + + +class AvatarTypeResponse(BaseModel): + name: str + path: str + + +class AvatarUpdate(BaseModel): + avatar_type: AvatarType + top_clothe_type: TopClothesType + bottom_clothe_type: BottomClothesType + + +class AvatarResponse(BaseModel): + id: int + user_id: int + avatar_type: AvatarTypeResponse + top_clothe_type: AvatarTypeResponse + bottom_clothe_type: AvatarTypeResponse + + +class AvatarOptions(BaseModel): + avatar_types: list[str] + top_clothe_types: list[str] + bottom_clothe_types: list[str] + + + +class Avatar: + def __init__( + self, + id: int, + user_id: int, + avatar_type: AvatarType, + top_clothe_type: TopClothesType, + bottom_clothe_type: BottomClothesType, + ): + self.id = id + self.user_id = user_id + self.avatar_type = avatar_type + self.top_clothe_type = top_clothe_type + self.bottom_clothe_type = bottom_clothe_type + + def to_response(self) -> AvatarResponse: + return AvatarResponse( + id=self.id, + user_id=self.user_id, + avatar_type=AvatarTypeResponse( + name=self.avatar_type, + path=avatar_path_[self.avatar_type], + ), + top_clothe_type=AvatarTypeResponse( + name=self.top_clothe_type, + path=top_clothe_path_[self.top_clothe_type], + ), + bottom_clothe_type=AvatarTypeResponse( + name=self.bottom_clothe_type, + path=bottom_clothe_path_[self.bottom_clothe_type], + ), + ) diff --git a/Backend/schemas/diary.py b/Backend/schemas/diary.py new file mode 100644 index 0000000..cf2d9d1 --- /dev/null +++ b/Backend/schemas/diary.py @@ -0,0 +1,109 @@ +from pydantic import BaseModel, field_validator +from datetime import datetime +from typing import Optional, List +from fastapi import Form + + +class DiaryCreate(BaseModel): + title: str + content: str + category: str + + @classmethod + def as_form( + cls, + title: str = Form(...), + content: str = Form(...), + category: str = Form(...), + ) -> "DiaryCreate": + return cls(title=title, content=content, category=category) + + @field_validator("title") + @classmethod + def validate_title(cls, v): + if len(v.strip()) < 1: + raise ValueError("Title cannot be empty") + if len(v) > 100: + raise ValueError("Title must be less than 100 characters") + return v.strip() + + @field_validator("content") + @classmethod + def validate_content(cls, v): + if len(v.strip()) < 1: + raise ValueError("Content cannot be empty") + if len(v) > 5000: + raise ValueError("Content must be less than 5000 characters") + return v.strip() + + +class DiaryUpdate(BaseModel): + title: Optional[str] = None + content: Optional[str] = None + category: Optional[str] = None + + @classmethod + def as_form( + cls, + title: Optional[str] = Form(None), + content: Optional[str] = Form(None), + category: Optional[str] = Form(None), + ) -> "DiaryUpdate": + return cls(title=title, content=content, category=category) + + +class DiaryResponse(BaseModel): + id: int + user_id: int + title: str + content: str + images: List[str] + category: str + created_at: datetime + is_submitted: bool + email_sent: bool + + +class Diary: + def __init__( + self, + id: int, + user_id: int, + title: str, + content: str, + images: str, # JSON string + category: str, + created_at: datetime, + is_submitted: bool = False, + email_sent: bool = False, + ): + self.id = id + self.user_id = user_id + self.title = title + self.content = content + self.images = images + self.category = category + self.created_at = created_at + self.is_submitted = is_submitted + self.email_sent = email_sent + + @property + def image_list(self) -> List[str]: + return ( + [img.strip() for img in self.images.split(",") if img.strip()] + if self.images + else [] + ) + + def to_response(self) -> DiaryResponse: + return DiaryResponse( + id=self.id, + user_id=self.user_id, + title=self.title, + content=self.content, + images=self.image_list, + category=self.category, + created_at=self.created_at, + is_submitted=self.is_submitted, + email_sent=self.email_sent, + ) diff --git a/Backend/schemas/friendship.py b/Backend/schemas/friendship.py new file mode 100644 index 0000000..a747653 --- /dev/null +++ b/Backend/schemas/friendship.py @@ -0,0 +1,59 @@ +from pydantic import BaseModel, field_validator +from datetime import datetime +import enum + + +class FriendshipStatus(str, enum.Enum): + PENDING = "pending" + ACCEPTED = "accepted" + REJECTED = "rejected" + + +class FriendshipRequest(BaseModel): + friend_username: str + + @field_validator("friend_username") + @classmethod + def validate_friend_username(cls, v): + if len(v.strip()) < 1: + raise ValueError("Friend username cannot be empty") + return v.strip() + + +class FriendshipResponse(BaseModel): + id: int + user_id: int + friend_id: int + friend_username: str + status: FriendshipStatus + created_at: datetime + + +class FriendshipUpdate(BaseModel): + status: FriendshipStatus + + +class Friendship: + def __init__( + self, + id: int, + user_id: int, + friend_id: int, + status: str, + created_at: datetime, + ): + self.id = id + self.user_id = user_id + self.friend_id = friend_id + self.status = status + self.created_at = created_at + + def to_response(self, friend_username: str) -> FriendshipResponse: + return FriendshipResponse( + id=self.id, + user_id=self.user_id, + friend_id=self.friend_id, + friend_username=friend_username, + status=FriendshipStatus(self.status), + created_at=self.created_at, + ) diff --git a/Backend/schemas/guestbook.py b/Backend/schemas/guestbook.py new file mode 100644 index 0000000..4472367 --- /dev/null +++ b/Backend/schemas/guestbook.py @@ -0,0 +1,46 @@ +from datetime import datetime +from pydantic import BaseModel, field_validator + + +class GuestBookCreate(BaseModel): + content: str + target_user_id: int + + @field_validator("content") + @classmethod + def validate_content(cls, v): + if len(v.strip()) < 1: + raise ValueError("GuestBook content cannot be empty") + if len(v) > 2000: + raise ValueError("GuestBook content must be less than 2000 characters") + return v.strip() + + +class GuestbookUpdate(BaseModel): + content: str + + +class GuestbookResponse(BaseModel): + id: int + content: str + target_user_id: int + user_id: int + user_profile_path: str + username: str + created_at: datetime + + +class GuestBook: + def __init__( + self, + id: int, + target_user_id: int, + user_id, + content, + created_at: datetime, + ): + self.id = id + self.target_user_id = target_user_id + self.user_id = user_id + self.content = content + self.created_at = created_at diff --git a/Backend/schemas/letter.py b/Backend/schemas/letter.py new file mode 100644 index 0000000..400366d --- /dev/null +++ b/Backend/schemas/letter.py @@ -0,0 +1,47 @@ +# from pydantic import BaseModel, field_validator, EmailStr +# +# # email validator 삭제 및 EmailStr 사용 +# +# +# class LetterCreate(BaseModel): +# content: str +# +# @field_validator("content") +# @classmethod +# def validate_content(cls, v): +# if len(v.strip()) < 1: +# raise ValueError("Letter content cannot be empty") +# if len(v) > 2000: +# raise ValueError("Letter content must be less than 2000 characters") +# return v.strip() +# +# +# class LetterResponse(BaseModel): +# id: int +# sender_id: int +# content: str +# +# +# class Letter: +# def __init__( +# self, +# id: int, +# sender_id: int, +# content: str, +# ): +# self.id = id +# self.sender_id = sender_id +# self.content = content +# +# def to_response(self) -> LetterResponse: +# return LetterResponse( +# id=self.id, +# sender_id=self.sender_id, +# content=self.content, +# ) +# +# +# class EmailRequest(BaseModel): +# sender_email: EmailStr +# sender_password: str +# sender_name: str diff --git a/Backend/schemas/photo.py b/Backend/schemas/photo.py new file mode 100644 index 0000000..234b1db --- /dev/null +++ b/Backend/schemas/photo.py @@ -0,0 +1,117 @@ +# from pydantic import BaseModel, field_validator +# from datetime import datetime +# +# +# class PhotoUpload(BaseModel): +# album_name: str +# title: str +# +# @field_validator("album_name") +# @classmethod +# def validate_album_name(cls, v): +# if len(v.strip()) < 1: +# raise ValueError("Album name cannot be empty") +# if len(v) > 50: +# raise ValueError("Album name must be less than 50 characters") +# return v.strip() +# +# @field_validator("title") +# @classmethod +# def validate_title(cls, v): +# if len(v.strip()) < 1: +# raise ValueError("Title cannot be empty") +# if len(v) > 100: +# raise ValueError("Title must be less than 100 characters") +# return v.strip() +# +# +# class PhotoResponse(BaseModel): +# id: int +# user_id: int +# album_name: str +# image_path: str +# title: str +# created_at: datetime +# +# +# class CommentCreate(BaseModel): +# content: str +# +# @field_validator("content") +# @classmethod +# def validate_content(cls, v): +# if len(v.strip()) < 1: +# raise ValueError("Comment cannot be empty") +# if len(v) > 500: +# raise ValueError("Comment must be less than 500 characters") +# return v.strip() +# +# +# class CommentResponse(BaseModel): +# id: int +# photo_id: int +# user_id: int +# username: str +# content: str +# created_at: datetime +# +# +# class FilterRequest(BaseModel): +# photo_id: int +# filter_type: str +# cover: bool +# title: str = None +# +# +# class Photo: +# def __init__( +# self, +# id: int, +# user_id: int, +# album_name: str, +# image_path: str, +# title: str, +# created_at: datetime, +# ): +# self.id = id +# self.user_id = user_id +# self.album_name = album_name +# self.image_path = image_path +# self.title = title +# self.created_at = created_at +# +# def to_response(self) -> PhotoResponse: +# return PhotoResponse( +# id=self.id, +# user_id=self.user_id, +# album_name=self.album_name, +# image_path=self.image_path, +# title=self.title, +# created_at=self.created_at, +# ) +# +# +# class PhotoComment: +# def __init__( +# self, +# id: int, +# photo_id: int, +# user_id: int, +# content: str, +# created_at: datetime, +# ): +# self.id = id +# self.photo_id = photo_id +# self.user_id = user_id +# self.content = content +# self.created_at = created_at +# +# def to_response(self, username: str) -> CommentResponse: +# return CommentResponse( +# id=self.id, +# photo_id=self.photo_id, +# user_id=self.user_id, +# username=username, +# content=self.content, +# created_at=self.created_at, +# ) diff --git a/Backend/schemas/room.py b/Backend/schemas/room.py new file mode 100644 index 0000000..c9381f6 --- /dev/null +++ b/Backend/schemas/room.py @@ -0,0 +1,296 @@ +import enum +from pydantic import BaseModel, field_validator +from typing import Optional, List + + +class RoomNameUpdateRequest(BaseModel): + new_name: str + + +class RoomTypes(enum.Enum): + ROOM_1 = "room_1" + ROOM_2 = "room_2" + + +class UpdateRoomTypeRequest(BaseModel): + type: RoomTypes + + +class RoomTypeResponse(BaseModel): + type: str + image_path: str + + +class RoomResponse(BaseModel): + id: int + user_id: int + room_name: str + room_type: RoomTypes + room_image_path: str + + +room_path = { + "room_1": "public/room/room_1.png", + "room_2": "public/room/room_2.png", +} + + +class FurnitureItem(BaseModel): + name: str + image_path: str + width: int + + +class Furniture(str, enum.Enum): + BLACK_LAPTOP1_0 = "검정 노트북1-01" + BLACK_LAPTOP1_180 = "검정 노트북1-1801" + BLACK_LAPTOP1_270 = "검정 노트북1-2701" + BLACK_LAPTOP1_90 = "검정 노트북1-901" + BLACK_LAPTOP2_0 = "검정 노트북2-01" + BLACK_LAPTOP2_180 = "검정 노트북2-1801" + BLACK_LAPTOP2_270 = "검정 노트북2-2701" + BLACK_LAPTOP2_90 = "검정 노트북2-901" + BLACK_LAPTOP3_0 = "검정 노트북3-01" + BLACK_LAPTOP3_180 = "검정 노트북3-1801" + BLACK_LAPTOP3_270 = "검정 노트북3-2701" + BLACK_LAPTOP3_90 = "검정 노트북3-901" + WOODEN_TABLE_90 = "나무 탁자-901" + WOODEN_TABLE_0 = "나무 탁자-01" + LAPTOP1_0 = "노트북1-01" + LAPTOP1_180 = "노트북1-1801" + LAPTOP1_270 = "노트북1-2701" + LAPTOP1_90 = "노트북1-901" + LAPTOP2_0 = "노트북2-01" + LAPTOP2_180 = "노트북2-1801" + LAPTOP2_270 = "노트북2-2701" + LAPTOP2_90 = "노트북2-901" + LAPTOP3_0 = "노트북3-01" + LAPTOP3_180 = "노트북3-1801" + LAPTOP3_270 = "노트북3-2701" + LAPTOP3_90 = "노트북3-901" + GREEN_TABLE = "녹색 탁자1" + MINI_FRIDGE_0 = "미니 냉장고-01" + MINI_FRIDGE_180 = "미니 냉장고-1801" + MINI_FRIDGE_90 = "미니 냉장고-901" + BOX_0 = "박스-01" + BOX_90 = "박스-901" + PINK_TABLE = "분홍색 탁자1" + SHELF_0 = "선반-01" + SHELF_180 = "선반-1801" + SHELF_270 = "선반-2701" + SHELF_90 = "선반-901" + TRASH_CAN_CLOSED = "쓰레기통 닫힘1" + TRASH_CAN_OPEN = "쓰레기통 열림1" + FISHBOWL_0 = "어항-01" + FISHBOWL_180 = "어항-1801" + FISHBOWL_270 = "어항-2701" + FISHBOWL_90 = "어항-901" + BEVERAGE_FRIDGE_0 = "음료 냉장고-01" + BEVERAGE_FRIDGE_180 = "음료 냉장고-1801" + BEVERAGE_FRIDGE_270 = "음료 냉장고-2701" + BEVERAGE_FRIDGE_90 = "음료 냉장고-901" + CHAIR_0 = "의자-01" + CHAIR_180 = "의자-1801" + CHAIR_270 = "의자-2701" + CHAIR_90 = "의자-901" + SMALL_SHELF_0 = "작은 선반-01" + SMALL_SHELF_180 = "작은 선반-1801" + SMALL_SHELF_270 = "작은 선반-2701" + SMALL_SHELF_90 = "작은 선반-901" + SMALL_PLANT = "작은 식물1" + BOOKSHELF_0 = "책장-01" + BOOKSHELF_180 = "책장-1801" + BOOKSHELF_270 = "책장-2701" + BOOKSHELF_90 = "책장-901" + LARGE_PLANT = "큰 식물1" + TV_0 = "티비-01" + TV_180 = "티비-1801" + TV_270 = "티비-2701" + TV_90 = "티비-901" + BLUE_TABLE = "파란색 탁자1" + GRAY_TABLE = "회색 탁자1" + WHITE_LAPTOP1_0 = "흰 노트북1-01" + WHITE_LAPTOP1_180 = "흰 노트북1-1801" + WHITE_LAPTOP1_270 = "흰 노트북1-2701" + WHITE_LAPTOP1_90 = "흰 노트북1-901" + WHITE_LAPTOP2_0 = "흰 노트북2-01" + WHITE_LAPTOP2_180 = "흰 노트북2-1801" + WHITE_LAPTOP2_270 = "흰 노트북2-2701" + WHITE_LAPTOP2_90 = "흰 노트북2-901" + WHITE_LAPTOP3_0 = "흰 노트북3-01" + WHITE_LAPTOP3_180 = "흰 노트북3-1801" + WHITE_LAPTOP3_270 = "흰 노트북3-2701" + WHITE_LAPTOP3_90 = "흰 노트북3-901" + WHITE_SHELF_0 = "흰색 선반-01" + WHITE_SHELF_180 = "흰색 선반-1801" + WHITE_SHELF_270 = "흰색 선반-2701" + WHITE_SHELF_90 = "흰색 선반-901" + WHITE_SMALL_SHELF_0 = "흰색 작은 선반-01" + WHITE_SMALL_SHELF_180 = "흰색 작은 선반-1801" + WHITE_SMALL_SHELF_270 = "흰색 작은 선반-2701" + WHITE_SMALL_SHELF_90 = "흰색 작은 선반-901" + WHITE_TABLE = "흰색 탁자1" + EMPTY = "1" + + +class RoomFurniturePlacement(BaseModel): + id: int + room_id: int + furniture_name: Furniture + x: int + y: int + + +class FurniturePlacementRequest(BaseModel): + furniture_name: Furniture + x: int + y: int + + @field_validator("x", "y") + @classmethod + def validate_coordinates(cls, v): + if v < 0 or v >= 10: + raise ValueError("position must be between 0 and 10") + return v + + +class FurniturePlacementResponse(BaseModel): + furniture_name: Furniture + x: int + y: int + image_path: str + + +class RoomFurnitureResponse(BaseModel): + room: RoomResponse + furniture: List[FurniturePlacementResponse] + + +furniture_path = { + "검정 노트북1-01": "public/funiture/검정 노트북1-0.png", + "검정 노트북1-1801": "public/funiture/검정 노트북1-180.png", + "검정 노트북1-2701": "public/funiture/검정 노트북1-270.png", + "검정 노트북1-901": "public/funiture/검정 노트북1-90.png", + "검정 노트북2-01": "public/funiture/검정 노트북2-0.png", + "검정 노트북2-1801": "public/funiture/검정 노트북2-180.png", + "검정 노트북2-2701": "public/funiture/검정 노트북2-270.png", + "검정 노트북2-901": "public/funiture/검정 노트북2-90.png", + "검정 노트북3-01": "public/funiture/검정 노트북3-0.png", + "검정 노트북3-1801": "public/funiture/검정 노트북3-180.png", + "검정 노트북3-2701": "public/funiture/검정 노트북3-270.png", + "검정 노트북3-901": "public/funiture/검정 노트북3-90.png", + "나무 탁자-901": "public/funiture/나무 탁자-90.png", + "나무 탁자-01": "public/funiture/나무탁자-0.png", + "노트북1-01": "public/funiture/노트북1-0.png", + "노트북1-1801": "public/funiture/노트북1-180.png", + "노트북1-2701": "public/funiture/노트북1-270.png", + "노트북1-901": "public/funiture/노트북1-90.png", + "노트북2-01": "public/funiture/노트북2-0.png", + "노트북2-1801": "public/funiture/노트북2-180.png", + "노트북2-2701": "public/funiture/노트북2-270.png", + "노트북2-901": "public/funiture/노트북2-90.png", + "노트북3-01": "public/funiture/노트북3-0.png", + "노트북3-1801": "public/funiture/노트북3-180.png", + "노트북3-2701": "public/funiture/노트북3-270.png", + "노트북3-901": "public/funiture/노트북3-90.png", + "녹색 침대-02": "public/funiture/녹색 침대-0.png", + "녹색 침대-1802": "public/funiture/녹색 침대-180.png", + "녹색 침대-2702": "public/funiture/녹색 침대-270.png", + "녹색 침대-902": "public/funiture/녹색 침대-90.png", + "녹색 탁자1": "public/funiture/녹색 탁자.png", + "미니 냉장고-01": "public/funiture/미니 냉장고-0.png", + "미니 냉장고-1801": "public/funiture/미니 냉장고-180.png", + "미니 냉장고-901": "public/funiture/미니 냉장고-90.png", + "박스-01": "public/funiture/박스-0.png", + "박스-901": "public/funiture/박스-90.png", + "분홍색 탁자1": "public/funiture/분홍색 탁자.png", + "빨간 침대-02": "public/funiture/빨간 침대-0.png", + "빨간 침대-1802": "public/funiture/빨간 침대-180.png", + "빨간 침대-2702": "public/funiture/빨간 침대-270.png", + "빨간 침대-902": "public/funiture/빨간 침대-90.png", + "선반-01": "public/funiture/선반-0.png", + "선반-1801": "public/funiture/선반-180.png", + "선반-2701": "public/funiture/선반-270.png", + "선반-901": "public/funiture/선반-90.png", + "소파-02": "public/funiture/소파-0.png", + "소파-1802": "public/funiture/소파-180.png", + "소파-2702": "public/funiture/소파-270.png", + "소파-902": "public/funiture/소파-90.png", + "쓰레기통 닫힘1": "public/funiture/쓰레기통닫힘.png", + "쓰레기통 열림1": "public/funiture/쓰레기통열림.png", + "어항-01": "public/funiture/어항-0.png", + "어항-1801": "public/funiture/어항-180.png", + "어항-2701": "public/funiture/어항-270.png", + "어항-901": "public/funiture/어항-90.png", + "음료 냉장고-01": "public/funiture/음료 냉장고-0.png", + "음료 냉장고-1801": "public/funiture/음료 냉장고-180.png", + "음료 냉장고-2701": "public/funiture/음료 냉장고-270.png", + "음료 냉장고-901": "public/funiture/음료 냉장고-90.png", + "의자-01": "public/funiture/의자-0.png", + "의자-1801": "public/funiture/의자-180.png", + "의자-2701": "public/funiture/의자-270.png", + "의자-901": "public/funiture/의자-90.png", + "작은 선반-01": "public/funiture/작은 선반-0.png", + "작은 선반-1801": "public/funiture/작은 선반-180.png", + "작은 선반-2701": "public/funiture/작은 선반-270.png", + "작은 선반-901": "public/funiture/작은 선반-90.png", + "작은 식물1": "public/funiture/작은 식물.png", + "주황 침대-02": "public/funiture/주황 침대-0.png", + "주황 침대-1802": "public/funiture/주황 침대-180.png", + "주황 침대-2702": "public/funiture/주황 침대-270.png", + "주황 침대-902": "public/funiture/주황 침대-90.png", + "책장-01": "public/funiture/책장-0.png", + "책장-1801": "public/funiture/책장-180.png", + "책장-2701": "public/funiture/책장-270.png", + "책장-901": "public/funiture/책장-90.png", + "큰 식물1": "public/funiture/큰 식물.png", + "티비-01": "public/funiture/티비-0.png", + "티비-1801": "public/funiture/티비-180.png", + "티비-2701": "public/funiture/티비-270.png", + "티비-901": "public/funiture/티비-90.png", + "파란 침대-02": "public/funiture/파란 침대-0.png", + "파란 침대-1802": "public/funiture/파란 침대-180.png", + "파란 침대-2702": "public/funiture/파란 침대-270.png", + "파란 침대-902": "public/funiture/파란 침대-90.png", + "파란색 탁자1": "public/funiture/파란색 탁자.png", + "회색 탁자1": "public/funiture/회색 탁자.png", + "흰 노트북1-01": "public/funiture/흰 노트북1-0.png", + "흰 노트북1-1801": "public/funiture/흰 노트북1-180.png", + "흰 노트북1-2701": "public/funiture/흰 노트북1-270.png", + "흰 노트북1-901": "public/funiture/흰 노트북1-90.png", + "흰 노트북2-01": "public/funiture/흰 노트북2-0.png", + "흰 노트북2-1801": "public/funiture/흰 노트북2-180.png", + "흰 노트북2-2701": "public/funiture/흰 노트북2-270.png", + "흰 노트북2-901": "public/funiture/흰 노트북2-90.png", + "흰 노트북3-01": "public/funiture/흰 노트북3-0.png", + "흰 노트북3-1801": "public/funiture/흰 노트북3-180.png", + "흰 노트북3-2701": "public/funiture/흰 노트북3-270.png", + "흰 노트북3-901": "public/funiture/흰 노트북3-90.png", + "흰색 선반-01": "public/funiture/흰색 선반-0.png", + "흰색 선반-1801": "public/funiture/흰색 선반-180.png", + "흰색 선반-2701": "public/funiture/흰색 선반-270.png", + "흰색 선반-901": "public/funiture/흰색 선반-90.png", + "흰색 작은 선반-01": "public/funiture/흰색 작은 선반-0.png", + "흰색 작은 선반-1801": "public/funiture/흰색 작은 선반-180.png", + "흰색 작은 선반-2701": "public/funiture/흰색 작은 선반-270.png", + "흰색 작은 선반-901": "public/funiture/흰색 작은 선반-90.png", + "흰색 탁자1": "public/funiture/흰색 탁자.png", + "1": "1", +} + + +class Room: + def __init__(self, id: int, user_id: int, room_name: str, room_type: RoomTypes): + self.id = id + self.user_id = user_id + self.room_name = room_name + self.room_type = room_type + + def to_response(self) -> RoomResponse: + return RoomResponse( + id=self.id, + user_id=self.user_id, + room_name=self.room_name, + room_type=self.room_type, + room_image_path=room_path[self.room_type], + ) diff --git a/Backend/schemas/user.py b/Backend/schemas/user.py new file mode 100644 index 0000000..1082521 --- /dev/null +++ b/Backend/schemas/user.py @@ -0,0 +1,93 @@ +from pydantic import BaseModel, EmailStr +from datetime import datetime +from typing import Optional +import hashlib +import secrets +from fastapi import Form + + +class UserCreate(BaseModel): + username: str + email: EmailStr + password: str + + @classmethod + def as_form( + cls, + username: str = Form(...), + email: EmailStr = Form(...), + password: str = Form(...), + ) -> "UserCreate": + return cls(username=username, email=email, password=password) + + +class UserUpdate(BaseModel): + email: Optional[EmailStr] = None + password: Optional[str] = None + + @classmethod + def as_form( + cls, + email: Optional[EmailStr] = Form(default=None), + password: Optional[str] = Form(default=None), + ) -> "UserUpdate": + return cls(email=email, password=password) + + +class UserLogin(BaseModel): + username: str + password: str + + +class UserResponse(BaseModel): + id: int + username: str + email: str + created_at: datetime + profile_image_path: str + is_active: bool + + +class User: + def __init__( + self, + id: int, + username: str, + email: str, + password_hash: str, + salt: str, + created_at: datetime, + profile_image_path: str, + is_active: bool = True, + ): + self.id = id + self.username = username + self.email = email + self.password_hash = password_hash + self.salt = salt + self.created_at = created_at + self.profile_image_path = profile_image_path + self.is_active = is_active + + @staticmethod + def hash_password(password: str, salt: Optional[str] = None) -> tuple[str, str]: + if salt is None: + salt = secrets.token_hex(32) + password_hash = hashlib.pbkdf2_hmac( + "sha256", password.encode("utf-8"), salt.encode("utf-8"), 100000 + ) + return password_hash.hex(), salt + + def verify_password(self, password: str) -> bool: + password_hash, _ = self.hash_password(password, self.salt) + return password_hash == self.password_hash + + def to_response(self) -> UserResponse: + return UserResponse( + id=self.id, + username=self.username, + email=self.email, + created_at=self.created_at, + profile_image_path=self.profile_image_path, + is_active=self.is_active, + ) diff --git a/Backend/services/__init__.py b/Backend/services/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Backend/services/avatar_service.py b/Backend/services/avatar_service.py new file mode 100644 index 0000000..0869583 --- /dev/null +++ b/Backend/services/avatar_service.py @@ -0,0 +1,74 @@ +from typing import Optional +from ..schemas.avatar import ( + AvatarUpdate, + Avatar, + AvatarOptions, + AvatarType, + TopClothesType, + BottomClothesType, +) +from ..utils.db import execute, fetch_one +from ..utils.queries.avatar import AvatarQueries + + +class AvatarService: + + @staticmethod + async def init_db(): + await execute(AvatarQueries.CREATE_TABLE) + + async def get_or_create_avatar(self, user_id: int) -> Avatar: + avatar = await self.get_user_avatar(user_id) + if not avatar: + avatar = await self.create_default_avatar(user_id) + return avatar + + async def get_user_avatar(self, user_id: int) -> Optional[Avatar]: + row = await fetch_one(AvatarQueries.SELECT_USER_AVATAR, (user_id,)) + if not row: + return None + return Avatar(**row) + + async def create_default_avatar(self, user_id: int) -> Avatar: + await execute( + AvatarQueries.INSERT_AVATAR, + ( + user_id, + AvatarType.MALE.value, + TopClothesType.ANA_CLOTHES.value, + BottomClothesType.JEANS.value, + ), + ) + return await self.get_user_avatar(user_id) + + async def update_avatar(self, user_id: int, avatar_data: AvatarUpdate) -> Avatar: + + update_fields = [] + params = [] + + if avatar_data.avatar_type is not None: + update_fields.append("avatar_type = ?") + params.append(avatar_data.avatar_type.value) + if avatar_data.top_clothe_type is not None: + update_fields.append("top_clothe_type = ?") + params.append(avatar_data.top_clothe_type.value) + if avatar_data.bottom_clothe_type is not None: + update_fields.append("bottom_clothe_type = ?") + params.append(avatar_data.bottom_clothe_type.value) + + if update_fields: + query = AvatarQueries.UPDATE_AVATAR.format(fields=", ".join(update_fields)) + params.append(user_id) + await execute(query, tuple(params)) + + return await self.get_user_avatar(user_id) + + async def get_avatar_options(self) -> AvatarOptions: + return AvatarOptions( + avatar_types=list(AvatarType), + top_clothe_types=list(TopClothesType), + bottom_clothe_types=list(BottomClothesType), + ) + + async def get_avatar_by_userId(self, user_id: int) -> Optional[Avatar]: + return await self.get_user_avatar(user_id) \ No newline at end of file diff --git a/Backend/services/diary_service.py b/Backend/services/diary_service.py new file mode 100644 index 0000000..e8fd232 --- /dev/null +++ b/Backend/services/diary_service.py @@ -0,0 +1,144 @@ +import os +from datetime import datetime +from typing import List, Optional +from fastapi import UploadFile +from ..schemas.diary import DiaryCreate, DiaryUpdate, Diary +from ..utils.db import execute, fetch_one, fetch_all +from ..utils.image_processor import ImageProcessor +from ..utils.queries.diary import DiaryQueries + + +class DiaryService: + def __init__(self): + self.image_processor = ImageProcessor() + self.upload_dir = "uploads/diary" + os.makedirs(self.upload_dir, exist_ok=True) + + @staticmethod + async def init_db(): + await execute(DiaryQueries.CREATE_TABLE) + + async def create_diary( + self, user_id: int, diary_data: DiaryCreate, files: List[UploadFile] + ) -> Diary: + # image_path 는 ,로 구분 되어 있음 + image_path = "" + if files is not None: + for file in files: + image_path += ( + "," + + await self.image_processor.write_file_and_get_image_path( + file, self.upload_dir + ) + ) + image_path = image_path[1:] + + query = DiaryQueries.INSERT_DIARY + + created_at = datetime.now() + await execute( + query, + ( + user_id, + diary_data.title, + diary_data.content, + image_path, + diary_data.category, + created_at, + False, + False, + ), + ) + + row = await fetch_one( + DiaryQueries.SELECT_LATEST_USER_DIARY, + (user_id,), + ) + + return Diary(**row) + + async def get_user_diaries( + self, user_id: int, skip: int = 0, limit: int = 20, category: str = None + ) -> List[Diary]: + if category: + query = DiaryQueries.SELECT_USER_DIARIES_BY_CATEGORY + rows = await fetch_all(query, (user_id, category, limit, skip)) + else: + query = DiaryQueries.SELECT_USER_DIARIES + rows = await fetch_all(query, (user_id, limit, skip)) + + return [Diary(**row) for row in rows] + + async def get_diary_by_id(self, diary_id: int) -> Optional[Diary]: + query = DiaryQueries.SELECT_BY_ID + row = await fetch_one(query, (diary_id,)) + + if not row: + return None + + return Diary(**row) + + async def get_diary_with_user_id( + self, diary_id: int, user_id: int + ) -> Optional[Diary]: + query = DiaryQueries.SELECT_BY_ID_WITH_USER_ID + row = await fetch_one(query, (diary_id, user_id)) + + if not row: + return None + + return Diary(**row) + + async def update_diary( + self, + diary_id: int, + user_id: int, + diary_data: DiaryUpdate, + files: List[UploadFile], + ) -> Optional[Diary]: + diary = await self.get_diary_with_user_id(diary_id, user_id) + if not diary: + return None + + update_fields = [] + params = [] + + if diary_data.title is not None: + update_fields.append("title = ?") + params.append(diary_data.title) + + if diary_data.content is not None: + update_fields.append("content = ?") + params.append(diary_data.content) + + if diary_data.category is not None: + update_fields.append("category = ?") + params.append(diary_data.category) + + if files is not None: + update_fields.append("images = ?") + image_paths = "" + for file in files: + image_paths += ( + "," + + await self.image_processor.write_file_and_get_image_path( + file, self.upload_dir + ) + ) + image_paths = image_paths[1:] + params.append(image_paths) + + if update_fields: + query = DiaryQueries.UPDATE_DIARY.format(fields=", ".join(update_fields)) + params.extend([diary_id, user_id]) + await execute(query, tuple(params)) + + return await self.get_diary_with_user_id(diary_id, user_id) + + async def delete_diary(self, diary_id: int, user_id: int) -> bool: + try: + query = DiaryQueries.DELETE_DIARY + await execute(query, (diary_id, user_id)) + return True + except Exception: + return False diff --git a/Backend/services/friendship_service.py b/Backend/services/friendship_service.py new file mode 100644 index 0000000..3ec4415 --- /dev/null +++ b/Backend/services/friendship_service.py @@ -0,0 +1,142 @@ +from typing import List, Optional +from datetime import datetime +from ..schemas.friendship import Friendship, FriendshipResponse, FriendshipStatus +from ..utils.db import execute, fetch_one, fetch_all +from ..utils.queries.friendship import FriendshipQueries + + +class FriendshipService: + + @staticmethod + async def init_db(): + await execute(FriendshipQueries.CREATE_TABLE) + + async def send_friendship_request( + self, user_id: int, friend_username: str + ) -> FriendshipResponse: + friend_query = FriendshipQueries.SELECT_USER_BY_USERNAME + friend_row = await fetch_one(friend_query, (friend_username,)) + + if not friend_row: + raise ValueError("User not found") + + friend_id = friend_row["id"] + + if user_id == friend_id: + raise ValueError("Cannot send friendship request to yourself") + + existing_query = FriendshipQueries.SELECT_EXISTING_FRIENDSHIP + existing_row = await fetch_one( + existing_query, (user_id, friend_id, friend_id, user_id) + ) + + if existing_row: + raise ValueError("Friendship request already exists") + + created_at = datetime.now() + + query = FriendshipQueries.INSERT_FRIENDSHIP + + await execute( + query, (user_id, friend_id, FriendshipStatus.PENDING.value, created_at) + ) + + friendship_row = await fetch_one( + FriendshipQueries.SELECT_FRIENDSHIP_BY_IDS, + (user_id, friend_id), + ) + + if not friendship_row: + raise ValueError("Friendship not found after creation") + + friendship = Friendship( + id=friendship_row["id"], + user_id=friendship_row["user_id"], + friend_id=friendship_row["friend_id"], + status=friendship_row["status"], + created_at=friendship_row["created_at"], + ) + + return friendship.to_response(friend_username) + + async def accept_friendship_request( + self, friendship_id: int, user_id: int + ) -> Optional[FriendshipResponse]: + friendship_query = FriendshipQueries.SELECT_FRIENDSHIP_FOR_ACCEPT + + friendship_row = await fetch_one( + friendship_query, + (friendship_id, user_id, FriendshipStatus.PENDING.value), + ) + + if not friendship_row: + return None + + update_query = FriendshipQueries.UPDATE_FRIENDSHIP_STATUS + await execute(update_query, (FriendshipStatus.ACCEPTED.value, friendship_id)) + + friendship = Friendship( + id=friendship_row["id"], + user_id=friendship_row["user_id"], + friend_id=friendship_row["friend_id"], + status=FriendshipStatus.ACCEPTED.value, + created_at=friendship_row["created_at"], + ) + + return friendship.to_response(friendship_row["username"]) + + async def get_user_friendships( + self, user_id: int, status: Optional[str] = None + ) -> List[FriendshipResponse]: + if status: + query = FriendshipQueries.SELECT_USER_FRIENDSHIPS_BY_STATUS + rows = await fetch_all(query, (user_id, user_id, user_id, status)) + else: + query = FriendshipQueries.SELECT_USER_FRIENDSHIPS + rows = await fetch_all( + query, (user_id, user_id, user_id, FriendshipStatus.ACCEPTED.value) + ) + + friendships = [] + for row in rows: + friendship = Friendship( + id=row["id"], + user_id=row["user_id"], + friend_id=row["friend_id"], + status=row["status"], + created_at=row["created_at"], + ) + friendships.append(friendship.to_response(row["username"])) + + return friendships + + async def delete_friendship(self, friendship_id: int, user_id: int) -> bool: + query = FriendshipQueries.DELETE_FRIENDSHIP + await execute(query, (friendship_id, user_id, user_id)) + return True + + async def get_pending_requests(self, user_id: int) -> List[FriendshipResponse]: + query = FriendshipQueries.SELECT_PENDING_REQUESTS + + rows = await fetch_all(query, (user_id, FriendshipStatus.PENDING.value)) + + friendships = [] + for row in rows: + friendship = Friendship( + id=row["id"], + user_id=row["user_id"], + friend_id=row["friend_id"], + status=row["status"], + created_at=row["created_at"], + ) + friendships.append(friendship.to_response(row["username"])) + + return friendships + + async def check_friendship(self, user_id1: int, user_id2: int) -> bool: + friendship_query = FriendshipQueries.CHECK_FRIENDSHIP_STATUS + friendship_row = await fetch_one( + friendship_query, (user_id1, user_id2, user_id2, user_id1) + ) + + return friendship_row is not None diff --git a/Backend/services/guestbook_service.py b/Backend/services/guestbook_service.py new file mode 100644 index 0000000..d1648a2 --- /dev/null +++ b/Backend/services/guestbook_service.py @@ -0,0 +1,110 @@ +from datetime import datetime +from typing import List +from fastapi import HTTPException +from Backend.utils.db import execute, fetch_one, fetch_all +from Backend.utils.queries.guestbook import GuestBookQueries +from Backend.schemas.guestbook import GuestBook, GuestBookCreate, GuestbookResponse +from Backend.schemas.user import User +from Backend.utils.queries.user import UserQueries + + +class GuestbookService: + def __init__(self): + pass + + @staticmethod + async def init_db(): + await execute(GuestBookQueries.CREATE_TABLE) + + async def create_guestbook( + self, data: GuestBookCreate, user: User + ) -> GuestbookResponse: + user_exist = await fetch_one(UserQueries.SELECT_BY_ID, (data.target_user_id,)) + if user_exist is None: + raise HTTPException(status_code=404, detail="User not found") + + ex_row = await fetch_one( + GuestBookQueries.SELECT_GUEST_BOOK_BY_USER_ID, (user.id,) + ) + created_at = datetime.now() + query = GuestBookQueries.INSERT_GUEST_BOOK + await execute(query, (data.target_user_id, user.id, data.content, created_at)) + + query = GuestBookQueries.SELECT_GUEST_BOOK_BY_USER_ID + row = await fetch_one(query, (user.id,)) + + if not (ex_row is None): + if row is None or ex_row["id"] == row["id"]: + raise HTTPException( + status_code=400, detail="Failed to create guest book" + ) + + return GuestbookResponse( + id=row["id"], + content=row["content"], + target_user_id=row["target_user_id"], + user_id=row["user_id"], + user_profile_path=user.profile_image_path, + username=user.username, + created_at=row["created_at"], + ) + + async def get_target_user_guestbooks( + self, target_user_id: int, limit: int = 20, offset: int = 0 + ) -> List[GuestbookResponse]: + query = GuestBookQueries.SELECT_TARGET_USER_GUEST_BOOKS + + rows = await fetch_all(query, (target_user_id, limit, offset)) + + response_list = [] + for row in rows: + user = await fetch_one(UserQueries.SELECT_BY_ID, (row["user_id"],)) + + response_list.append( + GuestbookResponse( + id=row["id"], + content=row["content"], + target_user_id=row["target_user_id"], + user_id=row["user_id"], + user_profile_path=user["profile_image_path"], + username=user["username"], + created_at=row["created_at"], + ) + ) + + return response_list + + async def update_guestbook_by_id(self, id: int, content: str) -> GuestbookResponse: + query = GuestBookQueries.SELECT_GUEST_BOOK_BY_ID + + row = await fetch_one(query, (id,)) + + if row is None: + raise HTTPException(status_code=404, detail="Guest book not found") + + query = GuestBookQueries.UPDATE_GUEST_BOOK_BY_ID + await execute(query, (content, id)) + + query = GuestBookQueries.SELECT_GUEST_BOOK_BY_ID + + row = await fetch_one(query, (id,)) + + user = await fetch_one(UserQueries.SELECT_BY_ID, (row["user_id"],)) + + return GuestbookResponse( + id=row["id"], + content=row["content"], + target_user_id=row["target_user_id"], + user_id=row["user_id"], + user_profile_path=user["profile_image_path"], + username=user["username"], + created_at=row["created_at"], + ) + + async def delete_guestbook_by_id(self, id: int, user_id: int) -> bool: + try: + query = GuestBookQueries.DELETE_GUEST_BOOK + await execute(query, (id, user_id)) + return True + except Exception: + return False diff --git a/Backend/services/letter_service.py b/Backend/services/letter_service.py new file mode 100644 index 0000000..fcc6422 --- /dev/null +++ b/Backend/services/letter_service.py @@ -0,0 +1,81 @@ +# from typing import List, Optional +# from ..schemas.letter import LetterCreate, Letter, EmailRequest +# from ..utils.db import execute, fetch_one, fetch_all +# from ..utils.default_queries import LetterQueries +# from ..utils.email_processor import EmailProcessor +# +# +# class LetterService: +# def __init__(self): +# self.email_processor = EmailProcessor() +# +# @staticmethod +# async def init_db(): +# await execute(LetterQueries.CREATE_TABLE) +# +# async def create_letter(self, sender_id: int, letter_data: LetterCreate) -> Letter: +# query = LetterQueries.INSERT_LETTER +# +# await execute( +# query, +# (sender_id, letter_data.content), +# ) +# +# row = await fetch_one( +# LetterQueries.SELECT_LATEST_USER_LETTER, +# (sender_id,), +# ) +# +# return Letter(**row) +# +# async def get_user_letters( +# self, sender_id: int, skip: int = 0, limit: int = 20 +# ) -> List[Letter]: +# query = LetterQueries.SELECT_USER_LETTERS +# rows = await fetch_all(query, (sender_id, limit, skip)) +# return [Letter(**row) for row in rows] +# +# async def get_letter_by_id( +# self, letter_id: int, sender_id: int +# ) -> Optional[Letter]: +# query = LetterQueries.SELECT_LETTER_BY_ID +# row = await fetch_one(query, (letter_id, sender_id)) +# if not row: +# return None +# return Letter(**row) +# +# async def delete_letter(self, letter_id: int, sender_id: int) -> bool: +# try: +# query = LetterQueries.DELETE_LETTER +# await execute( +# query, +# (letter_id, sender_id), +# ) +# return True +# except Exception: +# return False +# +# async def update_letter( +# self, letter_id: int, sender_id: int, content: str +# ) -> Optional[Letter]: +# query = LetterQueries.UPDATE_LETTER +# await execute( +# query, +# (content, letter_id, sender_id), +# ) +# +# row = await fetch_one( +# LetterQueries.SELECT_LETTER_BY_ID, +# (letter_id, sender_id), +# ) +# if row is None: +# return None +# +# return Letter(**row) +# +# async def send_letter(self, letter: Letter, data: EmailRequest): +# subject = f"2025_SSF_LETTER_{data.sender_name}" +# content = letter.content +# await self.email_processor.send_email( +# subject, content, data.sender_email, data.sender_password +# ) diff --git a/Backend/services/photo_service.py b/Backend/services/photo_service.py new file mode 100644 index 0000000..43f11f8 --- /dev/null +++ b/Backend/services/photo_service.py @@ -0,0 +1,150 @@ +# import os +# from datetime import datetime +# from typing import List +# from fastapi import UploadFile +# from ..schemas.photo import ( +# PhotoUpload, +# Photo, +# PhotoComment, +# CommentCreate, +# CommentResponse, +# ) +# from ..utils.db import execute, fetch_one, fetch_all +# from ..utils.default_queries import PhotoQueries +# from ..utils.image_processor import ImageProcessor +# +# +# class PhotoService: +# def __init__(self): +# self.image_processor = ImageProcessor() +# self.upload_dir = "uploads/photos" +# os.makedirs(self.upload_dir, exist_ok=True) +# +# @staticmethod +# async def init_db(): +# await execute(PhotoQueries.CREATE_TABLE) +# await execute(PhotoQueries.CREATE_COMMENTS_TABLE) +# +# async def upload_photo( +# self, user_id: int, photo_data: PhotoUpload, file: UploadFile +# ) -> Photo: +# if not file.content_type.startswith("image/"): +# raise ValueError("File must be an image") +# +# self.image_processor.validate_image_file(file.filename, file.size) +# +# created_at = datetime.now() +# +# image_path = await self.image_processor.write_file_and_get_image_path( +# file, self.upload_dir +# ) +# +# query = PhotoQueries.INSERT_PHOTO +# +# await execute( +# query, +# (user_id, photo_data.album_name, image_path, photo_data.title, created_at), +# ) +# +# row = await fetch_one( +# PhotoQueries.SELECT_LATEST_USER_PHOTO, +# (user_id,), +# ) +# +# return Photo(**row) +# +# async def get_user_photos( +# self, user_id: int, skip: int = 0, limit: int = 20, album_name: str = None +# ) -> List[Photo]: +# if album_name: +# query = PhotoQueries.SELECT_USER_PHOTOS_BY_ALBUM +# rows = await fetch_all(query, (user_id, album_name, limit, skip)) +# else: +# query = PhotoQueries.SELECT_USER_PHOTOS +# rows = await fetch_all(query, (user_id, limit, skip)) +# +# return [Photo(**row) for row in rows] +# +# async def check_friendship(self, user_id: int, photo_id: int) -> bool: +# photo_query = PhotoQueries.SELECT_PHOTO_OWNER +# photo_row = await fetch_one(photo_query, (photo_id,)) +# +# if not photo_row: +# return False +# +# photo_owner_id = photo_row["user_id"] +# +# if user_id == photo_owner_id: +# return True +# +# from ..services.friendship_service import FriendshipService +# +# friendship_service = FriendshipService() +# return await friendship_service.check_friendship(user_id, photo_owner_id) +# +# async def add_comment( +# self, photo_id: int, user_id: int, comment_data: CommentCreate +# ) -> PhotoComment: +# if not await self.check_friendship(user_id, photo_id): +# raise ValueError("Cannot add comment before being friends") +# created_at = datetime.now() +# +# query = PhotoQueries.INSERT_COMMENT +# +# await execute(query, (photo_id, user_id, comment_data.content, created_at)) +# +# row = await fetch_one( +# PhotoQueries.SELECT_LATEST_COMMENT, +# (photo_id, user_id), +# ) +# +# return PhotoComment(**row) +# +# async def get_photo_comments(self, photo_id: int) -> List[CommentResponse]: +# query = PhotoQueries.SELECT_PHOTO_COMMENTS +# +# rows = await fetch_all(query, (photo_id,)) +# +# return [CommentResponse(**row) for row in rows] +# +# async def apply_filter( +# self, +# photo_id: int, +# filter_type: str, +# user_id: int, +# cover: bool = False, +# title: str = None, +# ) -> str: +# photo_query = PhotoQueries.SELECT_PHOTO_BY_ID +# row = await fetch_one(photo_query, (photo_id, user_id)) +# +# if not row: +# raise ValueError("Photo not found") +# +# original_path = row["image_path"] +# filtered_path = await self.image_processor.apply_filter( +# original_path, filter_type +# ) +# +# if cover: +# photo_update_query = PhotoQueries.UPDATE_PHOTO_PATH +# await execute(photo_update_query, (filtered_path, photo_id, user_id)) +# else: +# row = await fetch_one( +# PhotoQueries.SELECT_PHOTO_ALBUM_NAME, (photo_id, user_id) +# ) +# photo_create_query = PhotoQueries.INSERT_PHOTO +# await execute( +# photo_create_query, +# (user_id, row["album_name"], filtered_path, title, datetime.now()), +# ) +# +# return filtered_path +# +# async def delete_photo(self, photo_id: int, user_id: int) -> bool: +# try: +# query = PhotoQueries.DELETE_PHOTO +# await execute(query, (photo_id, user_id)) +# return True +# except Exception: +# return False diff --git a/Backend/services/room_service.py b/Backend/services/room_service.py new file mode 100644 index 0000000..122e4ba --- /dev/null +++ b/Backend/services/room_service.py @@ -0,0 +1,149 @@ +from fastapi import HTTPException +from typing import List +from Backend.utils.queries.room import RoomQueries +from Backend.schemas.room import ( + FurnitureItem, + RoomFurniturePlacement, + FurniturePlacementRequest, + Room, + RoomTypes, + RoomTypeResponse, + room_path, + Furniture, + furniture_path, + RoomFurnitureResponse, + FurniturePlacementResponse, + RoomResponse, +) +from Backend.utils.db import fetch_all, fetch_one, execute + + +class RoomService: + + @staticmethod + async def init_db(): + await execute(RoomQueries.CREATE_TABLE) + await execute(RoomQueries.CREATE_TABLE_ROOM_FURNITURE) + await execute(RoomQueries.CREATE_TABLE_USER_FURNITURE) + + async def get_or_create_room(self, user_id: int) -> int: + row = await fetch_one(RoomQueries.SELECT_ROOM_ID_BY_USER_ID, (user_id,)) + if row: + return row["id"] + + await execute(RoomQueries.INSERT_ROOM, (user_id, "My Room", "room_1")) + new_row = await fetch_one(RoomQueries.SELECT_ROOM_ID_BY_USER_ID, (user_id,)) + + return new_row["id"] + + async def get_room_by_id(self, id: int) -> Room: + row = await fetch_one(RoomQueries.SELECT_ROOM_BY_ID, (id,)) + if row is None: + raise HTTPException(status_code=404, detail="Room not found") + + return Room(**row) + + async def get_room_by_userId(self, id: int) -> Room: + row = await fetch_one(RoomQueries.SELECT_ROOM_BY_USER_ID, (id,)) + if row is None: + raise HTTPException(status_code=404, detail="Room not found") + + return Room(**row) + + async def get_room_types(self) -> List[RoomTypeResponse]: + return [ + RoomTypeResponse(type=rt.value, image_path=room_path[rt.value]) + for rt in RoomTypes + ] + + async def update_room_name(self, room_id: int, new_name: str): + await execute(RoomQueries.UPDATE_ROOM_NAME, (new_name, room_id)) + + async def update_room_type(self, room_id: int, new_type: RoomTypes): + query = RoomQueries.UPDATE_ROOM_TYPE + await execute(query, (new_type.value, room_id)) + + row = await fetch_one(RoomQueries.SELECT_ROOM_BY_ID, (room_id,)) + return Room(**row) + + # furniture + async def get_furniture_catalog(self) -> List[FurnitureItem]: + furniture_list = [] + for f in list(Furniture): + furniture_list.append( + FurnitureItem( + name=f, + image_path=furniture_path[f], + width=int(f[-1]), + ) + ) + + return furniture_list + + async def get_room_furnitures(self, room_id: int) -> RoomFurnitureResponse: + rows = await fetch_all(RoomQueries.SELECT_ROOM_FURNITURE, (room_id,)) + furniture_placement_response = [] + for row in rows: + furniture_placement_response.append( + FurniturePlacementResponse( + furniture_name=row["furniture_name"], + x=row["x"], + y=row["y"], + image_path=furniture_path[row["furniture_name"]], + ) + ) + row = await fetch_one(RoomQueries.SELECT_ROOM_BY_ID, (room_id,)) + return RoomFurnitureResponse( + furniture=furniture_placement_response, + room=RoomResponse( + id=row["id"], + user_id=row["user_id"], + room_name=row["room_name"], + room_type=row["room_type"], + room_image_path=room_path[row["room_type"]], + ), + ) + + async def place_furniture(self, room_id: int, request: FurniturePlacementRequest): + is_oneone = furniture_path.get(request.furniture_name + "1") is not None + + placed_furnitures = await fetch_all( + RoomQueries.SELECT_ROOM_FURNITURE, (room_id,) + ) + + for f in placed_furnitures: + if f["x"] == request.x and f["y"] == request.y: + raise HTTPException(status_code=409, detail="Furniture already placed") + + await execute( + RoomQueries.INSERT_ROOM_FURNITURE, + (room_id, request.furniture_name, request.x, request.y), + ) + if not is_oneone: + await execute( + RoomQueries.INSERT_ROOM_FURNITURE, + (room_id, "1", request.x - 1, request.y), + ) + + async def remove_furniture(self, room_id: int, x: int, y: int, furniture_name: str): + is_oneone = furniture_path.get(furniture_name + "1") is not None + await execute(RoomQueries.DELETE_FURNITURE, (room_id, x, y)) + if not is_oneone: + await execute(RoomQueries.DELETE_FURNITURE, (room_id, x - 1, y)) + + async def add_furniture(self, user_id: int, furniture_name: str): + await execute(RoomQueries.INSERT_USER_FURNITURE, (user_id, furniture_name)) + + async def get_user_furniture(self, user_id: int): + rows = await fetch_all(RoomQueries.SELECT_USER_FURNITURE, (user_id,)) + furniture_list = [] + for row in rows: + furniture_list.append( + FurnitureItem( + name=row["furniture_name"], + image_path=furniture_path[row["furniture_name"]], + width=int(row["furniture_name"][-1]), + ) + ) + + return furniture_list \ No newline at end of file diff --git a/Backend/services/store_service.py b/Backend/services/store_service.py new file mode 100644 index 0000000..d393875 --- /dev/null +++ b/Backend/services/store_service.py @@ -0,0 +1,33 @@ +import httpx + + +class StoreService: + def __init__(self): + self.SERVER_URL = "https://dotory.ana.st" + + async def get_dotory_by_id(self, user_id: int): + async with httpx.AsyncClient() as client: + response = await client.get(f"{self.SERVER_URL}/") + response_json = response.json() + return + + async def register_user(self, user_id: int): + async with httpx.AsyncClient() as client: + response = await client.post( + f"{self.SERVER_URL}/", json={"user_id": user_id} + ) + return + + async def buy_product(self, product_id: int, user_id: int): + async with httpx.AsyncClient() as client: + response = await client.post( + f"{self.SERVER_URL}/", json={"user_id": user_id} + ) + return + + async def update_user_dotory(self, user_id: int, dotoryNum: int): + async with httpx.AsyncClient() as client: + response = await client.put( + f"{self.SERVER_URL}/", json={"num": dotoryNum} + ) + return \ No newline at end of file diff --git a/Backend/services/user_service.py b/Backend/services/user_service.py new file mode 100644 index 0000000..d85800e --- /dev/null +++ b/Backend/services/user_service.py @@ -0,0 +1,176 @@ +from datetime import datetime, timezone, timedelta +from typing import Optional, List +import os +from fastapi import UploadFile +from Backend.utils.db import execute, fetch_one, fetch_all +from Backend.utils.image_processor import ImageProcessor +from Backend.utils.queries.user import UserQueries +from Backend.schemas.user import User, UserCreate, UserResponse, UserUpdate +from Backend.services.store_service import StoreService + +store_service = StoreService() + +class UserService: + def __init__(self): + self.image_processor = ImageProcessor() + self.upload_dir = "uploads/profile" + os.makedirs(self.upload_dir, exist_ok=True) + + @staticmethod + async def init_db(): + await execute(UserQueries.CREATE_TABLE) + + async def create_user( + self, user_data: UserCreate, profile_file: UploadFile = None + ) -> User: + password_hash, salt = + + if profile_file is not None: + await self.image_processor.validate_image_file( + + ) + image_path = + query = UserQueries.INSERT_USER_WITH_PROFILE + params = ( + user_data.username, + user_data.email, + password_hash, + salt, + image_path, + ) + else: + query = UserQueries.INSERT_USER_WITHOUT_PROFILE + params = (user_data.username, user_data.email, password_hash, salt) + + await execute( + query, + params, + ) + + row = await fetch_one( + UserQueries.SELECT_BY_USERNAME, + (user_data.username,), + ) + + if row is None: + raise Exception("User creation failed") + + row = dict(row) + + if isinstance(row["created_at"], str): + datetime.fromisoformat(row["created_at"].replace("Z", "+09:00")) + + row["is_active"] = bool(row["is_active"]) + + await store_service.register_user(row["id"]) + + + return User(**row) + + async def get_user_by_username(self, username: str) -> Optional[User]: + row = await fetch_one( + UserQueries.SELECT_BY_USERNAME, + (username,), + ) + + if row is None: + return None + + row = dict(row) + + if isinstance(row["created_at"], str): + datetime.fromisoformat(row["created_at"].replace("Z", "+09:00")) + + row["is_active"] = bool(row["is_active"]) + + return User(**row) + + async def get_user_by_email(self, email: str) -> Optional[User]: + row = await fetch_one( + UserQueries.SELECT_BY_EMAIL, + (email,), + ) + + if row is None: + return None + + row = dict(row) + + if isinstance(row["created_at"], str): + datetime.fromisoformat(row["created_at"].replace("Z", "+09:00")) + + row["is_active"] = bool(row["is_active"]) + + return User(**row) + + async def authenticate_user(self, username: str, password: str) -> Optional[User]: + user = + if user and : + return user + return None + + async def delete_user(self, username: str) -> bool: + try: + query = UserQueries.DELETE_USER_BY_USERNAME + await execute(query, (username,)) + return True + except Exception: + return False + + async def find_user(self, username: str) -> List[UserResponse]: + query = UserQueries.SELECT_BY_USERNAME_LIKE + rows = await fetch_all( + query, + ("%" + username + "%",), + ) + + return [User(**row).to_response() for row in rows] + + async def get_user_by_id(self, user_id: int) -> Optional[User]: + row = await fetch_one(UserQueries.SELECT_BY_ID, (user_id,)) + if row is None: + return None + row = dict(row) + if isinstance(row["created_at"], str): + datetime.fromisoformat(row["created_at"].replace("Z", "+09:00")) + row["is_active"] = bool(row["is_active"]) + return User(**row) + + async def update_user( + self, user: User, user_data: UserUpdate, profile_file: UploadFile = None + ) -> User: + update_fields = {} + if user_data.email: + existing_user = await fetch_one( + UserQueries.SELECT_USER_BY_EMAIL_AND_NOT_ID, + (user_data.email, user.id), + ) + if existing_user: + raise ValueError("Email already registered") + update_fields["email"] = user_data.email + + if user_data.password: + password_hash, salt = User.hash_password(user_data.password) + update_fields["password_hash"] = password_hash + update_fields["salt"] = salt + + if profile_file: + await self.image_processor.validate_image_file( + profile_file.filename, profile_file.size + ) + image_path = await self.image_processor.write_file_and_get_image_path( + profile_file, upload_dir=self.upload_dir + ) + update_fields["profile_image_path"] = image_path + + if not update_fields: + return user + + set_clause = ", ".join(f"{key} = ?" for key in update_fields.keys()) + query = UserQueries.UPDATE_USER_BY_ID.format(set_clause) + params = list(update_fields.values()) + params.append(user.id) + + await execute(query, tuple(params)) + + return await self.get_user_by_id(user.id) diff --git a/Backend/tests/__init__.py b/Backend/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Backend/tests/conftest.py b/Backend/tests/conftest.py new file mode 100644 index 0000000..312f139 --- /dev/null +++ b/Backend/tests/conftest.py @@ -0,0 +1,81 @@ +import pytest +from fastapi.testclient import TestClient +import sys +import os + +# Add Backend to path +sys.path.append(os.path.join(os.path.dirname(__file__), "..")) + +from Backend import app + + +@pytest.fixture(scope="module") +def client(): + with TestClient(app) as c: + yield c + + +@pytest.fixture +def authenticated_user(client): + user_data = { + "username": "testuser_authenticated", + "email": "test_auth@example.com", + "password": "testpassword123", + } + # Register user + response = client.post("/api/user/register", data=user_data) + + # Login to get token + login_data = {"username": user_data["username"], "password": user_data["password"]} + response = client.post("/api/user/login", json=login_data) + token = response.json()["access_token"] + + yield {"token": token, "user_data": user_data} + + # Cleanup: delete user via API + headers = {"Authorization": f"Bearer {token}"} + client.delete(f"/api/user/{user_data['username']}", headers=headers) + + +@pytest.fixture +def two_authenticated_users(client): + user1_data = { + "username": "testuser1", + "email": "test1@example.com", + "password": "testpassword123", + } + user2_data = { + "username": "testuser2", + "email": "test2@example.com", + "password": "testpassword123", + } + + # Register users + client.post("/api/user/register", data=user1_data) + client.post("/api/user/register", data=user2_data) + + # Login users + login1_data = { + "username": user1_data["username"], + "password": user1_data["password"], + } + response1 = client.post("/api/user/login", json=login1_data) + token1 = response1.json()["access_token"] + + login2_data = { + "username": user2_data["username"], + "password": user2_data["password"], + } + response2 = client.post("/api/user/login", json=login2_data) + token2 = response2.json()["access_token"] + + yield { + "user1": {"token": token1, "username": user1_data["username"]}, + "user2": {"token": token2, "username": user2_data["username"]}, + } + + # Cleanup + headers1 = {"Authorization": f"Bearer {token1}"} + headers2 = {"Authorization": f"Bearer {token2}"} + client.delete(f"/api/user/{user1_data['username']}", headers=headers1) + client.delete(f"/api/user/{user2_data['username']}", headers=headers2) diff --git a/Backend/tests/test_avatar.py b/Backend/tests/test_avatar.py new file mode 100644 index 0000000..13d41d8 --- /dev/null +++ b/Backend/tests/test_avatar.py @@ -0,0 +1,71 @@ +from fastapi.testclient import TestClient +from Backend.schemas.avatar import ( + AvatarUpdate, + AvatarType, + TopClothesType, + BottomClothesType, +) + + +def test_get_my_avatar(client: TestClient, authenticated_user): + headers = {"Authorization": f"Bearer {authenticated_user['token']}"} + response = client.get("/api/avatar", headers=headers) + assert response.status_code == 200 + avatar_data = response.json() + assert "id" in avatar_data + assert "user_id" in avatar_data + assert avatar_data["avatar_type"]["name"] == AvatarType.MALE.value + + +def test_update_my_avatar(client: TestClient, authenticated_user): + headers = {"Authorization": f"Bearer {authenticated_user['token']}"} + + response = client.get("/api/avatar", headers=headers) + assert response.status_code == 200 + update_data = AvatarUpdate( + avatar_type=AvatarType.FEMALE, + top_clothe_type=TopClothesType.SCHOOL_CLOTHES, + bottom_clothe_type=BottomClothesType.SCHOOL_CLOTHES_2, + ) + response = client.put( + "/api/avatar", json=update_data.model_dump(mode="json"), headers=headers + ) + + assert response.status_code == 200 + avatar_data = response.json() + assert avatar_data["avatar_type"]["name"] == update_data.avatar_type.value + assert avatar_data["top_clothe_type"]["name"] == update_data.top_clothe_type.value + assert ( + avatar_data["bottom_clothe_type"]["name"] + == update_data.bottom_clothe_type.value + ) + + +def test_get_avatar_options(client: TestClient): + response = client.get("/api/avatar/options") + assert response.status_code == 200 + options = response.json() + assert "avatar_types" in options + assert "top_clothe_types" in options + assert "bottom_clothe_types" in options + assert all(isinstance(item, str) for item in options["avatar_types"]) + assert all(isinstance(item, str) for item in options["top_clothe_types"]) + assert all(isinstance(item, str) for item in options["bottom_clothe_types"]) + + +def test_get_avatar_by_user_id(client: TestClient, authenticated_user): + headers = {"Authorization": f"Bearer {authenticated_user['token']}"} + response = client.get("/api/avatar", headers=headers) + assert response.status_code == 200 + user_id = response.json()["user_id"] + + response = client.get(f"/api/avatar/{user_id}", headers=headers) + assert response.status_code == 200 + avatar_data = response.json() + assert "id" in avatar_data + assert avatar_data["user_id"] == user_id + assert avatar_data["avatar_type"]["name"] == AvatarType.MALE.value + + # Test for a non-existent user + response = client.get("/api/avatar/9999", headers=headers) + assert response.status_code == 404 \ No newline at end of file diff --git a/Backend/tests/test_diary.py b/Backend/tests/test_diary.py new file mode 100644 index 0000000..f5bd904 --- /dev/null +++ b/Backend/tests/test_diary.py @@ -0,0 +1,52 @@ +from io import BytesIO + + +def test_diary_operations(client, authenticated_user): + token = authenticated_user["token"] + headers = {"Authorization": f"Bearer {token}"} + + # Create Diary + diary_data = { + "title": "test title", + "content": "test content", + "category": "test category", + } + response = client.post( + "/api/diary", + data=diary_data, + files={"file": ("a.jpg", BytesIO(b"aaa"), "image/jpeg")}, + headers=headers, + ) + assert response.status_code == 200 + diary_id = response.json()["id"] + assert response.json()["title"] == "test title" + + # Get Diary + response = client.get(f"/api/diary/{diary_id}", headers=headers) + assert response.status_code == 200 + assert response.json()["id"] == diary_id + + # List Diaries + response = client.get("/api/diary", headers=headers) + assert response.status_code == 200 + assert len(response.json()) > 0 + + # Update Diary + updated_diary_data = {"title": "updated title", "content": "updated content"} + response = client.put( + f"/api/diary/{diary_id}", + data=updated_diary_data, + files={"file": ("b.jpg", BytesIO(b"bbb"), "image/jpeg")}, + headers=headers, + ) + assert response.status_code == 200 + assert response.json()["title"] == "updated title" + + # Delete Diary + response = client.delete(f"/api/diary/{diary_id}", headers=headers) + assert response.status_code == 200 + assert response.json()["message"] == "Diary deleted successfully" + + # Verify Deletion + response = client.get(f"/api/diary/{diary_id}", headers=headers) + assert response.status_code == 400 diff --git a/Backend/tests/test_friendship.py b/Backend/tests/test_friendship.py new file mode 100644 index 0000000..781fc4a --- /dev/null +++ b/Backend/tests/test_friendship.py @@ -0,0 +1,45 @@ +def test_friendship_flow(client, two_authenticated_users): + user1 = two_authenticated_users["user1"] + user2 = two_authenticated_users["user2"] + + headers1 = {"Authorization": f"Bearer {user1['token']}"} + headers2 = {"Authorization": f"Bearer {user2['token']}"} + + # User 1 sends friendship request to User 2 + response = client.post( + "/api/friendship/request", + json={"friend_username": user2["username"]}, + headers=headers1, + ) + assert response.status_code == 200 + friendship_id = response.json()["id"] + assert response.json()["status"] == "pending" + + # User 2 accepts friendship request + response = client.put(f"/api/friendship/{friendship_id}/accept", headers=headers2) + assert response.status_code == 200 + assert response.json()["status"] == "accepted" + + # User 1 lists friends + response = client.get("/api/friendship", headers=headers1) + assert response.status_code == 200 + assert any(f["id"] == friendship_id for f in response.json()) + + # User 2 lists friends + response = client.get("/api/friendship", headers=headers2) + assert response.status_code == 200 + assert any(f["id"] == friendship_id for f in response.json()) + + # User 1 deletes friendship + response = client.delete(f"/api/friendship/{friendship_id}", headers=headers1) + assert response.status_code == 200 + assert response.json()["message"] == "Friendship deleted successfully" + + # Verify deletion for both users + response = client.get("/api/friendship", headers=headers1) + assert response.status_code == 200 + assert not any(f["id"] == friendship_id for f in response.json()) + + response = client.get("/api/friendship", headers=headers2) + assert response.status_code == 200 + assert not any(f["id"] == friendship_id for f in response.json()) diff --git a/Backend/tests/test_guestbook.py b/Backend/tests/test_guestbook.py new file mode 100644 index 0000000..c256f97 --- /dev/null +++ b/Backend/tests/test_guestbook.py @@ -0,0 +1,38 @@ +def test_guest_book(client, authenticated_user): + token = authenticated_user["token"] + headers = {"Authorization": f"Bearer {token}"} + + user_data = { + "username": "testtarget", + "email": "test@example.com", + "password": "testpassword123", + } + response = client.post("/api/user/register", data=user_data) + assert response.status_code == 201 + user_id = response.json()["id"] + username = response.json()["username"] + + response = client.post( + "/api/guestbook", + json={"target_user_id": user_id, "content": "test"}, + headers=headers, + ) + assert response.status_code == 201 + assert response.json()["content"] == "test" + id = response.json()["id"] + + response = client.get(f"/api/guestbook/{user_id}", headers=headers) + assert response.status_code == 200 + assert response.json()[0]["content"] == "test" + + response = client.put( + f"/api/guestbook/{id}", json={"content": "test2"}, headers=headers + ) + assert response.status_code == 200 + assert response.json()["content"] == "test2" + + response = client.delete(f"/api/guestbook/{id}", headers=headers) + assert response.status_code == 200 + + client.delete(f"/api/user/{username}", headers=headers) + assert response.status_code == 200 diff --git a/Backend/tests/test_letter.py b/Backend/tests/test_letter.py new file mode 100644 index 0000000..014db38 --- /dev/null +++ b/Backend/tests/test_letter.py @@ -0,0 +1,32 @@ +# def test_letter_operations(client, authenticated_user): +# token = authenticated_user["token"] +# headers = {"Authorization": f"Bearer {token}"} +# +# # Create Letter +# letter_data = {"content": "test content"} +# response = client.post("/api/letter", json=letter_data, headers=headers) +# assert response.status_code == 200 +# letter_id = response.json()["id"] +# assert response.json()["content"] == "test content" +# +# # Get Letter +# response = client.get(f"/api/letter/{letter_id}", headers=headers) +# assert response.status_code == 200 +# assert response.json()["id"] == letter_id +# +# # Update Letter +# updated_letter_data = {"content": "updated content"} +# response = client.put( +# f"/api/letter/{letter_id}", json=updated_letter_data, headers=headers +# ) +# assert response.status_code == 200 +# assert response.json()["content"] == "updated content" +# +# # Delete Letter +# response = client.delete(f"/api/letter/{letter_id}", headers=headers) +# assert response.status_code == 200 +# assert response.json()["detail"] == "Letter deleted" +# +# # Verify Deletion +# response = client.get(f"/api/letter/{letter_id}", headers=headers) +# assert response.status_code == 400 diff --git a/Backend/tests/test_photo.py b/Backend/tests/test_photo.py new file mode 100644 index 0000000..932b771 --- /dev/null +++ b/Backend/tests/test_photo.py @@ -0,0 +1,94 @@ +# from io import BytesIO +# import json +# +# +# def test_photo_upload_and_delete(client, authenticated_user): +# token = authenticated_user["token"] +# headers = {"Authorization": f"Bearer {token}"} +# +# # Upload Photo +# photo_data = {"album_name": "test_album", "title": "test_title"} +# photo_data_json = json.dumps(photo_data).encode("utf-8") +# +# response = client.post( +# "/api/photo/upload", +# files={ +# "photo_data": ( +# "photo_data.json", +# BytesIO(photo_data_json), +# "application/json", +# ), +# "file": ("a.jpg", BytesIO(b"aaa"), "image/jpeg"), +# }, +# headers=headers, +# ) +# assert response.status_code == 200 +# photo_id = response.json()["id"] +# assert response.json()["album_name"] == "test_album" +# +# # Delete Photo +# response = client.delete(f"/api/photo/{photo_id}", headers=headers) +# assert response.status_code == 200 +# assert response.json()["message"] == "Photo deleted successfully" +# +# +# def test_photo_commenting(client, two_authenticated_users): +# user1 = two_authenticated_users["user1"] +# user2 = two_authenticated_users["user2"] +# +# headers1 = {"Authorization": f"Bearer {user1['token']}"} +# headers2 = {"Authorization": f"Bearer {user2['token']}"} +# +# # User 1 uploads a photo +# photo_data = {"album_name": "test_album", "title": "test_title"} +# photo_data_json = json.dumps(photo_data).encode("utf-8") +# response = client.post( +# "/api/photo/upload", +# files={ +# "photo_data": ( +# "photo_data.json", +# BytesIO(photo_data_json), +# "application/json", +# ), +# "file": ("a.jpg", BytesIO(b"aaa"), "image/jpeg"), +# }, +# headers=headers1, +# ) +# assert response.status_code == 200 +# photo_id = response.json()["id"] +# +# # User 2 cannot comment before being friends +# response = client.post( +# f"/api/photo/{photo_id}/comment", +# json={"content": "test comment"}, +# headers=headers2, +# ) +# assert response.status_code == 400 +# +# # User 1 sends friendship request to User 2 +# response = client.post( +# "/api/friendship/request", +# json={"friend_username": user2["username"]}, +# headers=headers1, +# ) +# assert response.status_code == 200 +# friendship_id = response.json()["id"] +# +# # User 2 accepts friendship request +# response = client.put(f"/api/friendship/{friendship_id}/accept", headers=headers2) +# assert response.status_code == 200 +# +# # User 2 can now comment +# response = client.post( +# f"/api/photo/{photo_id}/comment", +# json={"content": "test comment"}, +# headers=headers2, +# ) +# assert response.status_code == 200 +# assert response.json()["content"] == "test comment" +# +# # User 1 can see the comment +# response = client.get(f"/api/photo/{photo_id}/comments", headers=headers1) +# assert response.status_code == 200 +# assert len(response.json()) > 0 +# assert response.json()[0]["content"] == "test comment" diff --git a/Backend/tests/test_room.py b/Backend/tests/test_room.py new file mode 100644 index 0000000..509fafd --- /dev/null +++ b/Backend/tests/test_room.py @@ -0,0 +1,161 @@ +from fastapi.testclient import TestClient +from Backend.schemas.room import Furniture, RoomTypes + + +def test_get_furniture_catalog(client: TestClient): + response = client.get("/api/room/catalog") + assert response.status_code == 200 + catalog = response.json() + assert isinstance(catalog, list) + assert len(catalog) > 0 + for item in catalog: + assert "name" in item + assert "image_path" in item + assert "width" in item + + +def test_get_room_types(client: TestClient): + response = client.get("/api/room/types") + assert response.status_code == 200 + types = response.json() + assert isinstance(types, list) + assert len(types) > 0 + for room_type in types: + assert "type" in room_type + assert "image_path" in room_type + + +def test_get_my_room(client: TestClient, authenticated_user): + headers = {"Authorization": f"Bearer {authenticated_user['token']}"} + response = client.get("/api/room/", headers=headers) + assert response.status_code == 200 + room_data = response.json() + assert "id" in room_data + assert "room_name" in room_data + assert "room_type" in room_data + assert "room_image_path" in room_data + + +def test_update_room_name(client: TestClient, authenticated_user): + headers = {"Authorization": f"Bearer {authenticated_user['token']}"} + response = client.get("/api/room/", headers=headers) + new_name = "My Awesome Room" + response = client.put("/api/room/", json={"new_name": new_name}, headers=headers) + + assert response.status_code == 200 + assert response.json() == {"message": "Room name updated successfully"} + + # Verify the change + response = client.get("/api/room/", headers=headers) + assert response.status_code == 200 + assert response.json()["room_name"] == new_name + + +def test_update_room_type(client: TestClient, authenticated_user): + headers = {"Authorization": f"Bearer {authenticated_user['token']}"} + response = client.get("/api/room/", headers=headers) + new_type = RoomTypes.ROOM_2.value + + response = client.patch("/api/room/", json={"type": new_type}, headers=headers) + assert response.status_code == 200 + updated_room = response.json() + assert updated_room["room_type"] == new_type + + +def test_get_my_room_layout(client: TestClient, authenticated_user): + headers = {"Authorization": f"Bearer {authenticated_user['token']}"} + response = client.get("/api/room/layout", headers=headers) + assert response.status_code == 200 + layout_data = response.json() + assert "room" in layout_data + assert "furniture" in layout_data + assert isinstance(layout_data["furniture"], list) + + +def test_place_furniture(client: TestClient, authenticated_user): + headers = {"Authorization": f"Bearer {authenticated_user['token']}"} + placement_data = { + "furniture_name": Furniture.SOFA_0.value, + "x": 5, + "y": 5, + } + response = client.post("/api/room/furniture", json=placement_data, headers=headers) + assert response.status_code == 200 + assert response.json() == {"message": "Furniture placed successfully"} + + # Verify placement + layout_response = client.get("/api/room/layout", headers=headers) + assert layout_response.status_code == 200 + new_layout = layout_response.json() + assert any( + item["furniture_name"] == placement_data["furniture_name"] + and item["x"] == placement_data["x"] + and item["y"] == placement_data["y"] + for item in new_layout["furniture"] + ) + + # Cleanup + client.delete( + f"/api/room/furniture?x={placement_data['x']}&y={placement_data['y']}&furniture_name={placement_data['furniture_name']}", + headers=headers, + ) + + +def test_remove_furniture(client: TestClient, authenticated_user): + headers = {"Authorization": f"Bearer {authenticated_user['token']}"} + placement_data = { + "furniture_name": Furniture.CHAIR_0.value, + "x": 1, + "y": 1, + } + # Place furniture first + client.post("/api/room/furniture", json=placement_data, headers=headers) + + # Remove furniture + response = client.delete( + f"/api/room/furniture?x={placement_data['x']}&y={placement_data['y']}&furniture_name={placement_data['furniture_name']}", + headers=headers, + ) + assert response.status_code == 200 + assert response.json() == {"message": "Furniture removed successfully"} + + # Verify removal + final_layout_response = client.get("/api/room/layout", headers=headers) + assert final_layout_response.status_code == 200 + final_layout = final_layout_response.json() + assert not any( + item["furniture_name"] == placement_data["furniture_name"] + and item["x"] == placement_data["x"] + and item["y"] == placement_data["y"] + for item in final_layout["furniture"] + ) + + +def test_invalid_furniture_placement(client: TestClient, authenticated_user): + headers = {"Authorization": f"Bearer {authenticated_user['token']}"} + + # Test with invalid coordinates (out of bounds) + invalid_coords_data = { + "furniture_name": Furniture.CHAIR_0.value, + "x": 11, + "y": -1, + } + response = client.post( + "/api/room/furniture", json=invalid_coords_data, headers=headers + ) + assert response.status_code == 422 # Pydantic validation error + + # Test collision + placement_data = {"furniture_name": Furniture.CHAIR_0.value, "x": 1, "y": 1} + # Place once + client.post("/api/room/furniture", json=placement_data, headers=headers) + # Try to place again in the same spot + response = client.post("/api/room/furniture", json=placement_data, headers=headers) + assert response.status_code == 400 + assert "already placed" in response.json()["detail"] + + # Cleanup + client.delete( + f"/api/room/furniture?x={placement_data['x']}&y={placement_data['y']}&furniture_name={placement_data['furniture_name']}", + headers=headers, + ) diff --git a/Backend/tests/test_user.py b/Backend/tests/test_user.py new file mode 100644 index 0000000..48394c9 --- /dev/null +++ b/Backend/tests/test_user.py @@ -0,0 +1,68 @@ +from io import BytesIO + + +def test_user_registration_and_login(client): + # Registration + user_data = { + "username": "testuser999", + "email": "test@example.com", + "password": "testpassword123", + } + response = client.post( + "/api/user/register", + data=user_data, + files={"file": ("a.jpg", BytesIO(b"aaa"), "image/jpeg")}, + ) + + assert response.status_code == 201 + assert response.json()["username"] == "testuser999" + + # Duplicate registration + response = client.post( + "/api/user/register", + data=user_data, + files={"file": ("a.jpg", BytesIO(b"aaa"), "image/jpeg")}, + ) + assert response.status_code == 400 + assert response.json()["detail"] == "Username already registered" + + # Login + login_data = { + "username": "testuser999", + "password": "testpassword123", + } + response = client.post("/api/user/login", json=login_data) + assert response.status_code == 200 + assert "access_token" in response.json() + + # Login with wrong password + login_data["password"] = "wrongpassword" + response = client.post("/api/user/login", json=login_data) + assert response.status_code == 401 + assert response.json()["detail"] == "Invalid username or password" + + # delete + response = client.delete(f"/api/user/{user_data['username']}") + assert response.status_code == 200 + + +def test_get_user_profile(client, authenticated_user): + token = authenticated_user["token"] + username = authenticated_user["user_data"]["username"] + headers = {"Authorization": f"Bearer {token}"} + + response = client.get(f"/api/user/profile/{username}", headers=headers) + + assert response.status_code == 200 + assert response.json()["username"] == username + + +def test_user_delete(client, authenticated_user): + token = authenticated_user["token"] + username = authenticated_user["user_data"]["username"] + headers = {"Authorization": f"Bearer {token}"} + + response = client.delete(f"/api/user/{username}", headers=headers) + + assert response.status_code == 200 + assert response.json()["detail"] == "User deleted" diff --git a/Backend/utils/__init__.py b/Backend/utils/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Backend/utils/db.py b/Backend/utils/db.py new file mode 100644 index 0000000..863a9a7 --- /dev/null +++ b/Backend/utils/db.py @@ -0,0 +1,53 @@ +import aiosqlite +from typing import Any, List, Tuple, Optional, Dict, Union + +DB_PATH = "database.sqlite3" + +# Generated by Github Copilot +# db 사용을 편하게 하기 위한 함수 + + +async def get_db_connection(db_path: str = DB_PATH) -> aiosqlite.Connection: + return await aiosqlite.connect(db_path) + + +async def execute( + query: str, + params: Union[Tuple[Any, ...], Dict[str, Any]] = (), + db_path: str = DB_PATH, +) -> None: + async with aiosqlite.connect(db_path) as db: + await db.execute(query, params) + await db.commit() + + +async def fetch_one( + query: str, + params: Union[Tuple[Any, ...], Dict[str, Any]] = (), + db_path: str = DB_PATH, +) -> Optional[aiosqlite.Row]: + async with aiosqlite.connect(db_path) as db: + db.row_factory = aiosqlite.Row + async with db.execute(query, params) as cursor: + return await cursor.fetchone() + + +async def fetch_all( + query: str, + params: Union[Tuple[Any, ...], Dict[str, Any]] = (), + db_path: str = DB_PATH, +) -> List[aiosqlite.Row]: + async with aiosqlite.connect(db_path) as db: + db.row_factory = aiosqlite.Row + async with db.execute(query, params) as cursor: + return await cursor.fetchall() + + +async def executemany( + query: str, + seq_of_params: List[Union[Tuple[Any, ...], Dict[str, Any]]], + db_path: str = DB_PATH, +) -> None: + async with aiosqlite.connect(db_path) as db: + await db.executemany(query, seq_of_params) + await db.commit() diff --git a/Backend/utils/default_queries.py b/Backend/utils/default_queries.py new file mode 100644 index 0000000..e070ba7 --- /dev/null +++ b/Backend/utils/default_queries.py @@ -0,0 +1,168 @@ +class PhotoQueries: + CREATE_TABLE = """ + CREATE TABLE IF NOT EXISTS photos ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + user_id INTEGER NOT NULL, + album_name TEXT NOT NULL, + image_path TEXT NOT NULL, + title TEXT, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE + ) + """ + + CREATE_COMMENTS_TABLE = """ + CREATE TABLE IF NOT EXISTS photo_comments ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + photo_id INTEGER NOT NULL, + user_id INTEGER NOT NULL, + content TEXT NOT NULL, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (photo_id) REFERENCES photos (id) ON DELETE CASCADE, + FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE + ) + """ + + INSERT_PHOTO = """ + INSERT INTO photos (user_id, album_name, image_path, title, created_at) + VALUES (?, ?, ?, ?, ?) + """ + + SELECT_USER_PHOTOS = """ + SELECT * FROM photos + WHERE user_id = ? + ORDER BY created_at DESC + LIMIT ? OFFSET ? + """ + + SELECT_USER_PHOTOS_BY_ALBUM = """ + SELECT * FROM photos + WHERE user_id = ? AND album_name = ? + ORDER BY created_at DESC + LIMIT ? OFFSET ? + """ + + SELECT_LATEST_USER_PHOTO = """ + SELECT * FROM photos WHERE user_id = ? ORDER BY id DESC LIMIT 1 + """ + + SELECT_PHOTO_OWNER = """ + SELECT user_id FROM photos WHERE id = ? + """ + + SELECT_PHOTO_ALBUM_NAME = """ + SELECT album_name FROM photos WHERE id = ? AND user_id = ? + """ + + INSERT_COMMENT = """ + INSERT INTO photo_comments (photo_id, user_id, content, created_at) + VALUES (?, ?, ?, ?) + """ + + SELECT_LATEST_COMMENT = """ + SELECT * FROM photo_comments WHERE photo_id = ? AND user_id = ? ORDER BY id DESC LIMIT 1 + """ + + SELECT_PHOTO_COMMENTS = """ + SELECT pc.*, u.username + FROM photo_comments pc + JOIN users u ON pc.user_id = u.id + WHERE pc.photo_id = ? + ORDER BY pc.created_at ASC + """ + + SELECT_PHOTO_BY_ID = """ + SELECT * FROM photos WHERE id = ? AND user_id = ? + """ + + DELETE_PHOTO = """ + DELETE FROM photos WHERE id = ? AND user_id = ? + """ + + UPDATE_PHOTO_PATH = """ + UPDATE photos SET image_path = ? WHERE id = ? AND user_id = ? + """ + + +class LetterQueries: + CREATE_TABLE = """ + CREATE TABLE IF NOT EXISTS letters ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + sender_id INTEGER NOT NULL, + content TEXT NOT NULL, + FOREIGN KEY (sender_id) REFERENCES users (id) ON DELETE CASCADE + ) + """ + + INSERT_LETTER = """ + INSERT INTO letters (sender_id, content) + VALUES (?, ?) + """ + + SELECT_USER_LETTERS = """ + SELECT * FROM letters + WHERE sender_id = ? + """ + + SELECT_LATEST_USER_LETTER = """ + SELECT * FROM letters WHERE sender_id = ? LIMIT 1 + """ + + SELECT_LETTER_BY_ID = """ + SELECT * FROM letters WHERE id = ? AND sender_id = ? + """ + + SELECT_LETTER_FOR_DELIVERY = """ + SELECT * FROM letters WHERE id = ? + """ + + SELECT_SENDER_USERNAME = """ + SELECT username FROM users WHERE id = ? + """ + + UPDATE_LETTER = """ + UPDATE letters SET content = ? WHERE id = ? AND sender_id = ? + """ + + DELETE_LETTER = """ + DELETE FROM letters WHERE id = ? AND sender_id = ? + """ + + +class DatabaseIndexes: + USER_INDEXES = [ + "CREATE INDEX IF NOT EXISTS idx_users_username ON users(username)", + "CREATE INDEX IF NOT EXISTS idx_users_email ON users(email)", + ] + + DIARY_INDEXES = [ + "CREATE INDEX IF NOT EXISTS idx_diaries_user_id ON diaries(user_id)", + "CREATE INDEX IF NOT EXISTS idx_diaries_category ON diaries(category)", + "CREATE INDEX IF NOT EXISTS idx_diaries_created_at ON diaries(created_at)", + ] + + PHOTO_INDEXES = [ + "CREATE INDEX IF NOT EXISTS idx_photos_user_id ON photos(user_id)", + "CREATE INDEX IF NOT EXISTS idx_photos_album ON photos(album_name)", + "CREATE INDEX IF NOT EXISTS idx_photo_comments_photo_id ON photo_comments(photo_id)", + ] + + FRIENDSHIP_INDEXES = [ + "CREATE INDEX IF NOT EXISTS idx_friendships_user_id ON friendships(user_id)", + "CREATE INDEX IF NOT EXISTS idx_friendships_friend_id ON friendships(friend_id)", + "CREATE INDEX IF NOT EXISTS idx_friendships_status ON friendships(status)", + ] + + LETTER_INDEXES = [ + "CREATE INDEX IF NOT EXISTS idx_letters_sender_id ON letters(sender_id)", + "CREATE INDEX IF NOT EXISTS idx_letters_sent_date ON letters(sent_date)", + ] + + AVATAR_INDEXES = [ + "CREATE INDEX IF NOT EXISTS idx_avatars_user_id ON avatars(user_id)", + ] + + GUEST_BOOK_INDEXES = [ + "CREATE INDEX IF NOT EXISTS idx_guest_books_user_id ON guest_books(user_id)", + "CREATE INDEX IF NOT EXISTS idx_guest_books_created_at ON guest_books(created_at)", + ] diff --git a/Backend/utils/email_processor.py b/Backend/utils/email_processor.py new file mode 100644 index 0000000..4d6c5c7 --- /dev/null +++ b/Backend/utils/email_processor.py @@ -0,0 +1,75 @@ +import aiosmtplib +from email.message import EmailMessage +from typing import Optional +import os +from pydantic import EmailStr +import ssl + +# aiosmtplib을 사용한 비동기 이메일 전송 +# EmailStr 사용 + + +class EmailProcessor: + def __init__(self): + self.smtp_server = os.getenv("SMTP_SERVER", "smtp.gmail.com") + self.smtp_port = int(os.getenv("SMTP_PORT", "587")) + self.sender_email = os.getenv("SENDER_EMAIL") + self.sender_password = os.getenv("SENDER_PASSWORD") + self.receiver_email = "" + + async def send_email( + self, + subject: str, + content: str, + sender_email: EmailStr, + sender_password: str, + html_content: Optional[str] = None, + ) -> bool: + if not self.sender_email or not self.sender_password: + print("Email credentials not configured, cannot send email.") + return False + + if not sender_email or not sender_password: + print( + "Warning: Email credentials (SENDER_EMAIL, SENDER_PASSWORD) " + "are not configured in environment variables." + ) + return False + + message = EmailMessage() + message["Subject"] = subject + message["From"] = sender_email + message["To"] = self.receiver_email + message.set_content(content) + + # HTML 내용이 있는 경우, 대체 콘텐츠로 추가 + if html_content: + message.add_alternative(html_content, subtype="html") + + try: + # 포트 465는 SMTPS (implicit TLS)를 사용하고, 포트 587은 STARTTLS를 사용합니다. + use_tls = self.smtp_port == 465 + context = ssl.create_default_context() if use_tls else None + + await aiosmtplib.send( + message, + hostname=self.smtp_server, + port=self.smtp_port, + username=sender_email, + password=sender_password, + use_tls=use_tls, + ssl_context=context, + timeout=10, + ) + + print(f"Email sent successfully to {self.receiver_email}") + return True + + except aiosmtplib.SMTPException as e: + print(f"SMTP error occurred while sending to {self.receiver_email}: {e}") + return False + except Exception as e: + print( + f"An unexpected error occurred while sending email to {self.receiver_email}: {e}" + ) + return False diff --git a/Backend/utils/image_processor.py b/Backend/utils/image_processor.py new file mode 100644 index 0000000..e694725 --- /dev/null +++ b/Backend/utils/image_processor.py @@ -0,0 +1,179 @@ +import os +import aiofiles +from PIL import Image, ImageFilter, ImageEnhance +from datetime import datetime +from starlette.datastructures import UploadFile + + +class ImageProcessor: + def __init__(self): + self.filter_dir = "uploads/filtered" + os.makedirs(self.filter_dir, exist_ok=True) + + async def apply_filter(self, image_path: str, filter_type: str) -> str: + """Apply filter to image and return the path to filtered image""" + + # Remove leading slash if exists for local file access + local_path = image_path.lstrip("/") + + if not os.path.exists(local_path): + raise ValueError(f"Image file not found: {local_path}") + + try: + with Image.open(local_path) as img: + # Convert to RGB if necessary + if img.mode != "RGB": + img = img.convert("RGB") + + filtered_img = self._apply_filter_effect(img, filter_type) + + # Generate filtered image filename + base_name = os.path.basename(image_path) + name, ext = os.path.splitext(base_name) + filtered_filename = f"{name}_{filter_type}{ext}" + filtered_path = os.path.join(self.filter_dir, filtered_filename) + + # Save filtered image + filtered_img.save(filtered_path, quality=85, optimize=True) + + return f"/uploads/filtered/{filtered_filename}" + + except Exception as e: + raise ValueError(f"Failed to apply filter: {str(e)}") + + def _apply_filter_effect(self, img: Image.Image, filter_type: str) -> Image.Image: + """Apply specific filter effect to image""" + if filter_type == "none": + return img + elif filter_type == "vintage": + return self._apply_vintage_filter(img) + elif filter_type == "black_white": + return self._apply_black_white_filter(img) + elif filter_type == "sepia": + return self._apply_sepia_filter(img) + elif filter_type == "blur": + return self._apply_blur_filter(img) + elif filter_type == "sharpen": + return self._apply_sharpen_filter(img) + elif filter_type == "bright": + return self._apply_brightness_filter(img) + elif filter_type == "contrast": + return self._apply_contrast_filter(img) + else: + raise ValueError(f"Unknown filter type: {filter_type}") + + def _apply_vintage_filter(self, img: Image.Image) -> Image.Image: + # Reduce saturation + enhancer = ImageEnhance.Color(img) + img = enhancer.enhance(0.7) + + # Add slight warm tint + r, g, b = img.split() + r = ImageEnhance.Brightness(r).enhance(1.1) + g = ImageEnhance.Brightness(g).enhance(1.05) + b = ImageEnhance.Brightness(b).enhance(0.9) + + return Image.merge("RGB", (r, g, b)) + + def _apply_black_white_filter(self, img: Image.Image) -> Image.Image: + return img.convert("L").convert("RGB") + + def _apply_sepia_filter(self, img: Image.Image) -> Image.Image: + pixels = img.load() + width, height = img.size + + for py in range(height): + for px in range(width): + r, g, b = pixels[px, py] + + tr = int(0.393 * r + 0.769 * g + 0.189 * b) + tg = int(0.349 * r + 0.686 * g + 0.168 * b) + tb = int(0.272 * r + 0.534 * g + 0.131 * b) + + pixels[px, py] = (min(255, tr), min(255, tg), min(255, tb)) + + return img + + def _apply_blur_filter(self, img: Image.Image) -> Image.Image: + return img.filter(ImageFilter.GaussianBlur(radius=2)) + + def _apply_sharpen_filter(self, img: Image.Image) -> Image.Image: + return img.filter(ImageFilter.SHARPEN) + + def _apply_brightness_filter(self, img: Image.Image) -> Image.Image: + enhancer = ImageEnhance.Brightness(img) + return enhancer.enhance(1.3) + + def _apply_contrast_filter(self, img: Image.Image) -> Image.Image: + enhancer = ImageEnhance.Contrast(img) + return enhancer.enhance(1.2) + + async def resize_image( + self, image_path: str, max_width: int = 800, max_height: int = 800 + ) -> str: + """Resize image while maintaining aspect ratio""" + + local_path = image_path.lstrip("/") + + if not os.path.exists(local_path): + raise ValueError(f"Image file not found: {local_path}") + + try: + with Image.open(local_path) as img: + # Calculate new size maintaining aspect ratio + img.thumbnail((max_width, max_height), Image.Resampling.LANCZOS) + + # Generate resized image filename + base_name = os.path.basename(image_path) + name, ext = os.path.splitext(base_name) + resized_filename = f"{name}_resized{ext}" + resized_path = os.path.join( + os.path.dirname(local_path), resized_filename + ) + + # Save resized image + img.save(resized_path, quality=85, optimize=True) + + return f"/{resized_path}" + + except Exception as e: + raise ValueError(f"Failed to resize image: {str(e)}") + + async def validate_image_file(self, filename: str, file_size: int): + """Validate image file type and size""" + + allowed_extensions = {".jpg", ".jpeg", ".png", ".gif", ".bmp", ".webp"} + + # Check file extension + _, ext = os.path.splitext(filename.lower()) + if ext not in allowed_extensions: + raise ValueError("Unsupported file type") + + if file_size > 20 * 1024 * 1024: # 20MB limit + raise ValueError("File size must be less than 20MB") + + def get_safe_filename(self, filename: str) -> str: + """Generate safe filename by removing dangerous characters""" + + import re + + # Keep only alphanumeric characters, dots, and hyphens + safe_name = re.sub(r"[^a-zA-Z0-9._-]", "_", filename) + + # Add timestamp to avoid collisions + name, ext = os.path.splitext(safe_name) + timestamp = int(datetime.now().timestamp()) + + return f"{name}_{timestamp}{ext}" + + async def write_file_and_get_image_path( + self, file: UploadFile, upload_dir: str + ) -> str: + filename = self.get_safe_filename(file.filename) + file_path = os.path.join(upload_dir, filename) + + async with aiofiles.open(file_path, "wb") as f: + content = await file.read() + await f.write(content) + + return file_path diff --git a/Backend/utils/queries/__init__.py b/Backend/utils/queries/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Backend/utils/queries/avatar.py b/Backend/utils/queries/avatar.py new file mode 100644 index 0000000..c6ebd95 --- /dev/null +++ b/Backend/utils/queries/avatar.py @@ -0,0 +1,25 @@ +class AvatarQueries: + + CREATE_TABLE = """ + CREATE TABLE IF NOT EXISTS avatars ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + user_id INTEGER UNIQUE NOT NULL, + avatar_type TEXT NOT NULL, + top_clothe_type TEXT, + bottom_clothe_type TEXT, + FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE + ) + """ + + SELECT_USER_AVATAR = """ + SELECT * FROM avatars WHERE user_id = ? + """ + + INSERT_AVATAR = """ + INSERT INTO avatars (user_id, avatar_type, top_clothe_type, bottom_clothe_type) + VALUES (?, ?, ?, ?) + """ + + UPDATE_AVATAR = """ + UPDATE avatars SET {fields} WHERE user_id = ? + """ \ No newline at end of file diff --git a/Backend/utils/queries/diary.py b/Backend/utils/queries/diary.py new file mode 100644 index 0000000..04a38d1 --- /dev/null +++ b/Backend/utils/queries/diary.py @@ -0,0 +1,71 @@ +class DiaryQueries: + + CREATE_TABLE = """ + CREATE TABLE IF NOT EXISTS diaries ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + user_id INTEGER NOT NULL, + title TEXT NOT NULL, + content TEXT NOT NULL, + images TEXT, + category TEXT NOT NULL, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + is_submitted BOOLEAN DEFAULT FALSE, + email_sent BOOLEAN DEFAULT FALSE, + FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE + ) + """ + + INSERT_DIARY = """ + INSERT INTO diaries (user_id, title, content, images, category, created_at, is_submitted, email_sent) + VALUES (?, ?, ?, ?, ?, ?, ?, ?) + """ + + SELECT_USER_DIARIES = """ + SELECT * FROM diaries + WHERE user_id = ? + ORDER BY created_at DESC + LIMIT ? OFFSET ? + """ + + SELECT_USER_DIARIES_BY_CATEGORY = """ + SELECT * FROM diaries + WHERE user_id = ? AND category = ? + ORDER BY created_at DESC + LIMIT ? OFFSET ? + """ + + SELECT_BY_ID = """ + SELECT * FROM diaries WHERE id = ? + """ + + SELECT_BY_ID_WITH_USER_ID = """ + SELECT * FROM diaries WHERE id = ? AND user_id = ? + """ + + SELECT_LATEST_USER_DIARY = """ + SELECT * FROM diaries WHERE user_id = ? ORDER BY id DESC LIMIT 1 + """ + + SELECT_IMAGES_BY_ID = """ + SELECT images FROM diaries WHERE id = ? + """ + + UPDATE_DIARY = """ + UPDATE diaries SET {fields} WHERE id = ? AND user_id = ? + """ + + DELETE_DIARY = """ + DELETE FROM diaries WHERE id = ? AND user_id = ? + """ + + UPDATE_SUBMISSION_STATUS = """ + UPDATE diaries SET is_submitted = ? WHERE id = ? AND user_id = ? + """ + + UPDATE_EMAIL_SENT = """ + UPDATE diaries SET email_sent = ? WHERE id = ? + """ + + UPDATE_DIARY_IMAGE_BY_ID = """ + UPDATE diaries SET images = ? WHERE id = ? + """ diff --git a/Backend/utils/queries/friendship.py b/Backend/utils/queries/friendship.py new file mode 100644 index 0000000..f019f2a --- /dev/null +++ b/Backend/utils/queries/friendship.py @@ -0,0 +1,89 @@ +class FriendshipQueries: + """친구 관계 관련 쿼리""" + + CREATE_TABLE = """ + CREATE TABLE IF NOT EXISTS friendships ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + user_id INTEGER NOT NULL, + friend_id INTEGER NOT NULL, + status TEXT NOT NULL DEFAULT 'pending', + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE, + FOREIGN KEY (friend_id) REFERENCES users (id) ON DELETE CASCADE, + UNIQUE(user_id, friend_id) + ) + """ + + SELECT_USER_BY_USERNAME = """ + SELECT id FROM users WHERE username = ? + """ + + SELECT_EXISTING_FRIENDSHIP = """ + SELECT * FROM friendships + WHERE (user_id = ? AND friend_id = ?) OR (user_id = ? AND friend_id = ?) + """ + + INSERT_FRIENDSHIP = """ + INSERT INTO friendships (user_id, friend_id, status, created_at) + VALUES (?, ?, ?, ?) + """ + + SELECT_FRIENDSHIP_BY_IDS = """ + SELECT * FROM friendships WHERE user_id = ? AND friend_id = ? + """ + + SELECT_FRIENDSHIP_FOR_ACCEPT = """ + SELECT f.*, u.username + FROM friendships f + JOIN users u ON f.user_id = u.id + WHERE f.id = ? AND f.friend_id = ? AND f.status = ? + """ + + UPDATE_FRIENDSHIP_STATUS = """ + UPDATE friendships SET status = ? WHERE id = ? + """ + + SELECT_USER_FRIENDSHIPS = """ + SELECT f.*, u.username + FROM friendships f + JOIN users u ON ( + CASE + WHEN f.user_id = ? THEN f.friend_id = u.id + ELSE f.user_id = u.id + END + ) + WHERE (f.user_id = ? OR f.friend_id = ?) AND f.status = ? + ORDER BY f.created_at DESC + """ + + SELECT_USER_FRIENDSHIPS_BY_STATUS = """ + SELECT f.*, u.username + FROM friendships f + JOIN users u ON ( + CASE + WHEN f.user_id = ? THEN f.friend_id = u.id + ELSE f.user_id = u.id + END + ) + WHERE (f.user_id = ? OR f.friend_id = ?) AND f.status = ? + ORDER BY f.created_at DESC + """ + + DELETE_FRIENDSHIP = """ + DELETE FROM friendships + WHERE id = ? AND (user_id = ? OR friend_id = ?) + """ + + SELECT_PENDING_REQUESTS = """ + SELECT f.*, u.username + FROM friendships f + JOIN users u ON f.user_id = u.id + WHERE f.friend_id = ? AND f.status = ? + ORDER BY f.created_at DESC + """ + + CHECK_FRIENDSHIP_STATUS = """ + SELECT * FROM friendships + WHERE ((user_id = ? AND friend_id = ?) OR (user_id = ? AND friend_id = ?)) + AND status = 'accepted' + """ diff --git a/Backend/utils/queries/guestbook.py b/Backend/utils/queries/guestbook.py new file mode 100644 index 0000000..33e7d13 --- /dev/null +++ b/Backend/utils/queries/guestbook.py @@ -0,0 +1,40 @@ +class GuestBookQueries: + CREATE_TABLE = """ + CREATE TABLE IF NOT EXISTS guest_books ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + target_user_id INTEGER NOT NULL, + user_id INTEGER NOT NULL, + content TEXT NOT NULL, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE + ) + """ + + INSERT_GUEST_BOOK = """ + INSERT INTO guest_books (target_user_id, user_id, content, created_at) + VALUES (?, ?, ?, ?) + """ + + SELECT_TARGET_USER_GUEST_BOOKS = """ + SELECT * FROM guest_books + WHERE target_user_id = ? + ORDER BY created_at DESC + LIMIT ? OFFSET ? + """ + + SELECT_GUEST_BOOK_BY_ID = """ + SELECT * FROM guest_books WHERE id = ? + """ + + SELECT_GUEST_BOOK_BY_USER_ID = """ + SELECT * FROM guest_books WHERE user_id = ? ORDER BY created_at DESC LIMIT 1 + """ + + UPDATE_GUEST_BOOK_BY_ID = """ + UPDATE guest_books SET content = ?, updated_at=CURRENT_TIMESTAMP WHERE id = ? + """ + + DELETE_GUEST_BOOK = """ + DELETE FROM guest_books WHERE id = ? AND user_id = ? + """ diff --git a/Backend/utils/queries/room.py b/Backend/utils/queries/room.py new file mode 100644 index 0000000..8c0f07b --- /dev/null +++ b/Backend/utils/queries/room.py @@ -0,0 +1,81 @@ +class RoomQueries: + """마이 룸 관련 쿼리""" + + CREATE_TABLE = """ + CREATE TABLE IF NOT EXISTS rooms ( + id INTEGER PRIMARY KEY, + user_id INTEGER UNIQUE, + room_name TEXT, + room_type TEXT + ) + """ + CREATE_TABLE_ROOM_FURNITURE = """ + CREATE TABLE IF NOT EXISTS room_furnitures ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + room_id INTEGER NOT NULL, + furniture_name TEXT NOT NULL, + x INTEGER NOT NULL, + y INTEGER NOT NULL, + FOREIGN KEY (room_id) REFERENCES rooms(id) ON DELETE CASCADE + ) + """ + + CREATE_TABLE_USER_FURNITURE = """ + CREATE TABLE IF NOT EXISTS user_furnitures ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + user_id INTEGER NOT NULL, + furniture_name TEXT NOT NULL + ) + """ + + INSERT_USER_FURNITURE = """ + INSERT INTO user_furnitures (user_id, furniture_name) VALUES (?, ?) + """ + + INSERT_ROOM = """ + INSERT INTO rooms (user_id, room_name, room_type) VALUES (?, ?, ?) + """ + + INSERT_ROOM_FURNITURE = """ + INSERT INTO room_furnitures (room_id, furniture_name, x, y) VALUES (?, ?, ?, ?) + """ + + SELECT_ROOM_ID_BY_USER_ID = """ + SELECT id FROM rooms WHERE user_id = ? + """ + + SELECT_ROOM_BY_ID = """ + SELECT * FROM rooms WHERE id = ? + """ + + SELECT_FURNITURE = """ + SELECT * FROM furnitures + """ + + SELECT_ROOM_FURNITURE = """ + SELECT id, furniture_name, x, y FROM room_furnitures WHERE room_id = ? + """ + + SELECT_FURNITURE_ID_BY_X_Y = """ + SELECT id FROM room_furnitures WHERE room_id = ? AND x = ? AND y = ? + """ + + SELECT_USER_FURNITURE = """ + SELECT * FROM user_furnitures WHERE user_id = ? + """ + + UPDATE_ROOM_NAME = """ + UPDATE rooms SET room_name = ? WHERE id = ? + """ + + UPDATE_ROOM_TYPE = """ + UPDATE rooms SET room_type = ? WHERE id = ? + """ + + DELETE_FURNITURE = """ + DELETE FROM room_furnitures WHERE room_id = ? AND x = ? AND y = ? + """ + + SELECT_ROOM_BY_USER_ID = """ + SELECT * FROM rooms WHERE user_id = ? + """ diff --git a/Backend/utils/queries/user.py b/Backend/utils/queries/user.py new file mode 100644 index 0000000..96dbe04 --- /dev/null +++ b/Backend/utils/queries/user.py @@ -0,0 +1,61 @@ +class UserQueries: + """사용자 관련 쿼리""" + + CREATE_TABLE = """ + CREATE TABLE IF NOT EXISTS users ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + username TEXT UNIQUE NOT NULL, + email TEXT UNIQUE NOT NULL, + password_hash TEXT NOT NULL, + salt TEXT NOT NULL, + profile_image_path TEXT DEFAULT 'upload/profile/default.jpg', + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + is_active BOOLEAN DEFAULT TRUE + ) + """ + + INSERT_USER_WITHOUT_PROFILE = """ + INSERT INTO users (username, email, password_hash, salt) + VALUES (?, ?, ?, ?) + """ + + INSERT_USER_WITH_PROFILE = """ + INSERT INTO users (username, email, password_hash, salt, profile_image_path) + VALUES (?, ?, ?, ?, ?) + """ + + SELECT_BY_USERNAME = """ + SELECT * FROM users WHERE username = ? + """ + + SELECT_BY_EMAIL = """ + SELECT * FROM users WHERE email = ? + """ + + SELECT_BY_ID = """ + SELECT * FROM users WHERE id = ? + """ + + SELECT_BY_USERNAME_LIKE = """ + SELECT * FROM users WHERE username LIKE ? + """ + + DELETE_USER_BY_USERNAME = """ + DELETE FROM users WHERE username = ? + """ + + UPDATE_PROFILE_IMAGE_PATH_BY_USERNAME = """ + UPDATE users SET profile_image_path = ? WHERE username = ? + """ + + UPDATE_PROFILE_IMAGE_PATH_BY_ID = """ + UPDATE users SET profile_image_path = ? WHERE id = ? + """ + + UPDATE_USER_BY_ID = """ + UPDATE users SET {} WHERE id = ? + """ + + SELECT_USER_BY_EMAIL_AND_NOT_ID = """ + SELECT * FROM users WHERE email = ? AND id != ? + """ diff --git a/Backend/utils/run_server.py b/Backend/utils/run_server.py new file mode 100644 index 0000000..a42b550 --- /dev/null +++ b/Backend/utils/run_server.py @@ -0,0 +1,64 @@ +import sys +import os +from pathlib import Path +from fastapi import FastAPI +from fastapi.staticfiles import StaticFiles +from fastapi.middleware.cors import CORSMiddleware + +# 프로젝트 루트를 Python 경로에 추가 +project_root = Path(__file__).parent +sys.path.insert(0, str(project_root)) + + +app = FastAPI( + title="싸이월드 - 추억 속으로", + description="2000년대 감성의 소셜 네트워크 서비스", + version="1.0.0", +) + +app.add_middleware( + CORSMiddleware, + allow_origins=["*"], + allow_credentials=True, + allow_methods=["*"], + allow_headers=["*"], +) + +app.mount("/uploads", StaticFiles(directory="uploads"), name="uploads") +app.mount("/public", StaticFiles(directory="public"), name="public") + + +# 정적 파일 서빙 +async def init_folders(app: FastAPI): + app.mount("/uploads", StaticFiles(directory="uploads"), name="uploads") + + +async def init_db(): + + for service in os.listdir("Backend/services"): + try: + if service.endswith(".py"): + module_name = "Backend.services." + service[:-3] + module = __import__(module_name, fromlist=[""]) + service_class_name = service[:-3].split("_")[0] + "Service" + service_class_name = service_class_name.replace( + service_class_name[0], service_class_name[0].upper(), 1 + ) + service_class = getattr(module, service_class_name) + + await service_class.init_db() + print(f"{service_class_name} : init_db") + + except Exception as e: + print(f"failed to init_db {service}") + print(e) + + +async def startup_event(): + await init_folders(app) + await init_db() + + +def init_FastAPI() -> FastAPI: + app.add_event_handler("startup", startup_event) + return app diff --git a/README.md b/README.md new file mode 100644 index 0000000..dbe88ba --- /dev/null +++ b/README.md @@ -0,0 +1,49 @@ +## 2025 AnA SSF - 나만의 싸이월드 만들기 + +### 소개 +2000년대 감성을 담은 소셜 네트워크 서비스 '싸이월드'를 직접 구현해보는 프로젝트입니다. +사진 업로드, 미니홈피, 도토리, 방명록 등 주요 기능들을 구현했습니다. + +### 기술 스택 + - 프론트엔드 : Qwik-city, Tailwind CSS + - 백엔드 : FastAPI + - 데이터베이스 : SQLite + - 배포 : git + +### 주요 기능 + - 회원가입 / 로그인 + - 프로필 사진 업로드 및 방 꾸미기 + - 방명록 작성 + - 도토리 상점 + +### 프로젝트 구조 +2025-SSF-Internal\ +├── Backend\ +│ ├── __init__.py\ +│ ├── models\ +│ ├── routes\ +│ └── ...\ +└── README.md + +### 실행 방법 +1. 프론트엔드\ +git clone https://github.com/sunrin-ana/2025-SSF-Frontend.git \ +npm install\ +npm run + +2. 백엔드\ +git clone https://github.com/sunrin-ana/2025-SSF.git \ +pip install -r requirements.txt\ +uvicorn Backed:app --reload + +### 개발 기간 +2025-05-30 ~ 2025-09-12 + +### 팀원 +장한울 - diary, ~~photo~~, ~~letter~~, store\ +고윤 - avatar, room\ +김건우 - user, friendship\ +김주영 - dotory-manage server, frontend + +### 참고자료 +싸이월드 미니홈피 소개 diff --git a/api.json b/api.json new file mode 100644 index 0000000..9cda915 --- /dev/null +++ b/api.json @@ -0,0 +1 @@ +{"openapi":"3.1.0","info":{"title":"FastAPI","version":"0.1.0"},"paths":{"/register":{"post":{"tags":["user"],"summary":"Register User","operationId":"register_user_register_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/login":{"post":{"tags":["user"],"summary":"Login User","operationId":"login_user_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserLogin"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/profile/{username}":{"get":{"tags":["user"],"summary":"Get User Profile","operationId":"get_user_profile_profile__username__get","parameters":[{"name":"username","in":"path","required":true,"schema":{"type":"string","title":"Username"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/friendship/request":{"post":{"tags":["friendship","friendship"],"summary":"Send Friendship Request","operationId":"send_friendship_request_friendship_request_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FriendshipRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FriendshipResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/friendship/{friendship_id}/accept":{"put":{"tags":["friendship","friendship"],"summary":"Accept Friendship Request","operationId":"accept_friendship_request_friendship__friendship_id__accept_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"friendship_id","in":"path","required":true,"schema":{"type":"integer","title":"Friendship Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FriendshipResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/friendship":{"get":{"tags":["friendship","friendship"],"summary":"Get Friendships","operationId":"get_friendships_friendship_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"type":"string","title":"Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FriendshipResponse"},"title":"Response Get Friendships Friendship Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/friendship/{friendship_id}":{"delete":{"tags":["friendship","friendship"],"summary":"Delete Friendship","operationId":"delete_friendship_friendship__friendship_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"friendship_id","in":"path","required":true,"schema":{"type":"integer","title":"Friendship Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Delete Friendship Friendship Friendship Id Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/friendship/pending":{"get":{"tags":["friendship","friendship"],"summary":"Get Pending Requests","operationId":"get_pending_requests_friendship_pending_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/FriendshipResponse"},"type":"array","title":"Response Get Pending Requests Friendship Pending Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/diary":{"post":{"tags":["diary","diary"],"summary":"Create Diary","operationId":"create_diary_diary_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiaryCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiaryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["diary","diary"],"summary":"Get User Diaries","operationId":"get_user_diaries_diary_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Limit"}},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DiaryResponse"},"title":"Response Get User Diaries Diary Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/diary/{diary_id}":{"get":{"tags":["diary","diary"],"summary":"Get Diary","operationId":"get_diary_diary__diary_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"diary_id","in":"path","required":true,"schema":{"type":"integer","title":"Diary Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiaryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["diary","diary"],"summary":"Update Diary","operationId":"update_diary_diary__diary_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"diary_id","in":"path","required":true,"schema":{"type":"integer","title":"Diary Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiaryUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiaryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["diary","diary"],"summary":"Delete Diary","operationId":"delete_diary_diary__diary_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"diary_id","in":"path","required":true,"schema":{"type":"integer","title":"Diary Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Delete Diary Diary Diary Id Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/diary/upload-image":{"post":{"tags":["diary","diary"],"summary":"Upload Diary Image","operationId":"upload_diary_image_diary_upload_image_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_diary_image_diary_upload_image_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Upload Diary Image Diary Upload Image Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/diary/{diary_id}/submit-for-event":{"post":{"tags":["diary","diary"],"summary":"Submit Diary For Event","operationId":"submit_diary_for_event_diary__diary_id__submit_for_event_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"diary_id","in":"path","required":true,"schema":{"type":"integer","title":"Diary Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Submit Diary For Event Diary Diary Id Submit For Event Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/avatar":{"get":{"tags":["avatar","avatar"],"summary":"Get Current Avatar","operationId":"get_current_avatar_avatar_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AvatarResponse"}}}}},"security":[{"HTTPBearer":[]}]},"put":{"tags":["avatar","avatar"],"summary":"Update Avatar","operationId":"update_avatar_avatar_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AvatarUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AvatarResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/avatar/options":{"get":{"tags":["avatar","avatar"],"summary":"Get Avatar Options","operationId":"get_avatar_options_avatar_options_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AvatarOptions"}}}}}}},"/letter":{"post":{"tags":["letter","letter"],"summary":"Create Letter","operationId":"create_letter_letter_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LetterCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LetterResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/letter/my":{"get":{"tags":["letter","letter"],"summary":"Get My Letters","operationId":"get_my_letters_letter_my_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LetterResponse"},"title":"Response Get My Letters Letter My Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/letter/{letter_id}":{"get":{"tags":["letter","letter"],"summary":"Get Letter","operationId":"get_letter_letter__letter_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"letter_id","in":"path","required":true,"schema":{"type":"integer","title":"Letter Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LetterResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/photo/upload":{"post":{"tags":["photo","photo"],"summary":"Upload Photo","operationId":"upload_photo_photo_upload_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_photo_photo_upload_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PhotoResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/photo":{"get":{"tags":["photo","photo"],"summary":"Get User Photos","operationId":"get_user_photos_photo_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Limit"}},{"name":"album_name","in":"query","required":false,"schema":{"type":"string","title":"Album Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PhotoResponse"},"title":"Response Get User Photos Photo Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/photo/{photo_id}/comment":{"post":{"tags":["photo","photo"],"summary":"Add Photo Comment","operationId":"add_photo_comment_photo__photo_id__comment_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"photo_id","in":"path","required":true,"schema":{"type":"integer","title":"Photo Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommentCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommentResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/photo/{photo_id}/comments":{"get":{"tags":["photo","photo"],"summary":"Get Photo Comments","operationId":"get_photo_comments_photo__photo_id__comments_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"photo_id","in":"path","required":true,"schema":{"type":"integer","title":"Photo Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CommentResponse"},"title":"Response Get Photo Comments Photo Photo Id Comments Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/photo/edit-filter":{"post":{"tags":["photo","photo"],"summary":"Apply Photo Filter","operationId":"apply_photo_filter_photo_edit_filter_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FilterRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Apply Photo Filter Photo Edit Filter Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/photo/{photo_id}":{"delete":{"tags":["photo","photo"],"summary":"Delete Photo","operationId":"delete_photo_photo__photo_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"photo_id","in":"path","required":true,"schema":{"type":"integer","title":"Photo Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Delete Photo Photo Photo Id Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/test":{"get":{"tags":["guestBook"],"summary":"Get Guest Book","operationId":"get_guest_book_test_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"AvatarOptions":{"properties":{"face_types":{"items":{"type":"string"},"type":"array","title":"Face Types"},"hair_types":{"items":{"type":"string"},"type":"array","title":"Hair Types"},"clothes_types":{"items":{"type":"string"},"type":"array","title":"Clothes Types"},"background_types":{"items":{"type":"string"},"type":"array","title":"Background Types"}},"type":"object","required":["face_types","hair_types","clothes_types","background_types"],"title":"AvatarOptions"},"AvatarResponse":{"properties":{"id":{"type":"integer","title":"Id"},"user_id":{"type":"integer","title":"User Id"},"face_type":{"$ref":"#/components/schemas/FaceType"},"hair_type":{"$ref":"#/components/schemas/HairType"},"clothes_type":{"$ref":"#/components/schemas/ClothesType"},"background_type":{"$ref":"#/components/schemas/BackgroundType"},"position_x":{"type":"integer","title":"Position X"},"position_y":{"type":"integer","title":"Position Y"}},"type":"object","required":["id","user_id","face_type","hair_type","clothes_type","background_type","position_x","position_y"],"title":"AvatarResponse"},"AvatarUpdate":{"properties":{"face_type":{"anyOf":[{"$ref":"#/components/schemas/FaceType"},{"type":"null"}]},"hair_type":{"anyOf":[{"$ref":"#/components/schemas/HairType"},{"type":"null"}]},"clothes_type":{"anyOf":[{"$ref":"#/components/schemas/ClothesType"},{"type":"null"}]},"background_type":{"anyOf":[{"$ref":"#/components/schemas/BackgroundType"},{"type":"null"}]},"position_x":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Position X"},"position_y":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Position Y"}},"type":"object","title":"AvatarUpdate"},"BackgroundType":{"type":"string","enum":["room","garden","beach","city","space"],"title":"BackgroundType"},"Body_upload_diary_image_diary_upload_image_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_diary_image_diary_upload_image_post"},"Body_upload_photo_photo_upload_post":{"properties":{"photo_data":{"$ref":"#/components/schemas/PhotoUpload"},"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["photo_data","file"],"title":"Body_upload_photo_photo_upload_post"},"ClothesType":{"type":"string","enum":["casual","formal","sporty","vintage","cute"],"title":"ClothesType"},"CommentCreate":{"properties":{"content":{"type":"string","title":"Content"}},"type":"object","required":["content"],"title":"CommentCreate"},"CommentResponse":{"properties":{"id":{"type":"integer","title":"Id"},"photo_id":{"type":"integer","title":"Photo Id"},"user_id":{"type":"integer","title":"User Id"},"username":{"type":"string","title":"Username"},"content":{"type":"string","title":"Content"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","photo_id","user_id","username","content","created_at"],"title":"CommentResponse"},"DiaryCategory":{"type":"string","enum":["daily","travel","food","love","work","hobby"],"title":"DiaryCategory"},"DiaryCreate":{"properties":{"title":{"type":"string","title":"Title"},"content":{"type":"string","title":"Content"},"category":{"$ref":"#/components/schemas/DiaryCategory"},"images":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Images","default":[]}},"type":"object","required":["title","content","category"],"title":"DiaryCreate"},"DiaryResponse":{"properties":{"id":{"type":"integer","title":"Id"},"user_id":{"type":"integer","title":"User Id"},"title":{"type":"string","title":"Title"},"content":{"type":"string","title":"Content"},"images":{"items":{"type":"string"},"type":"array","title":"Images"},"category":{"$ref":"#/components/schemas/DiaryCategory"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"is_submitted":{"type":"boolean","title":"Is Submitted"},"email_sent":{"type":"boolean","title":"Email Sent"}},"type":"object","required":["id","user_id","title","content","images","category","created_at","is_submitted","email_sent"],"title":"DiaryResponse"},"DiaryUpdate":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content"},"category":{"anyOf":[{"$ref":"#/components/schemas/DiaryCategory"},{"type":"null"}]},"images":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Images"}},"type":"object","title":"DiaryUpdate"},"FaceType":{"type":"string","enum":["round","oval","square","heart"],"title":"FaceType"},"FilterRequest":{"properties":{"photo_id":{"type":"integer","title":"Photo Id"},"filter_type":{"type":"string","title":"Filter Type"}},"type":"object","required":["photo_id","filter_type"],"title":"FilterRequest"},"FriendshipRequest":{"properties":{"friend_username":{"type":"string","title":"Friend Username"}},"type":"object","required":["friend_username"],"title":"FriendshipRequest"},"FriendshipResponse":{"properties":{"id":{"type":"integer","title":"Id"},"user_id":{"type":"integer","title":"User Id"},"friend_id":{"type":"integer","title":"Friend Id"},"friend_username":{"type":"string","title":"Friend Username"},"status":{"$ref":"#/components/schemas/FriendshipStatus"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","user_id","friend_id","friend_username","status","created_at"],"title":"FriendshipResponse"},"FriendshipStatus":{"type":"string","enum":["pending","accepted","rejected"],"title":"FriendshipStatus"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HairType":{"type":"string","enum":["short","long","curly","ponytail","bob"],"title":"HairType"},"LetterCreate":{"properties":{"recipient_email":{"type":"string","title":"Recipient Email"},"content":{"type":"string","title":"Content"}},"type":"object","required":["recipient_email","content"],"title":"LetterCreate"},"LetterResponse":{"properties":{"id":{"type":"integer","title":"Id"},"sender_id":{"type":"integer","title":"Sender Id"},"recipient_email":{"type":"string","title":"Recipient Email"},"content":{"type":"string","title":"Content"},"sent_date":{"type":"string","format":"date-time","title":"Sent Date"},"is_sent":{"type":"boolean","title":"Is Sent"}},"type":"object","required":["id","sender_id","recipient_email","content","sent_date","is_sent"],"title":"LetterResponse"},"PhotoResponse":{"properties":{"id":{"type":"integer","title":"Id"},"user_id":{"type":"integer","title":"User Id"},"album_name":{"type":"string","title":"Album Name"},"image_path":{"type":"string","title":"Image Path"},"title":{"type":"string","title":"Title"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","user_id","album_name","image_path","title","created_at"],"title":"PhotoResponse"},"PhotoUpload":{"properties":{"album_name":{"type":"string","title":"Album Name"},"title":{"type":"string","title":"Title"}},"type":"object","required":["album_name","title"],"title":"PhotoUpload"},"UserCreate":{"properties":{"username":{"type":"string","title":"Username"},"email":{"type":"string","title":"Email"},"password":{"type":"string","title":"Password"}},"type":"object","required":["username","email","password"],"title":"UserCreate"},"UserLogin":{"properties":{"username":{"type":"string","title":"Username"},"password":{"type":"string","title":"Password"}},"type":"object","required":["username","password"],"title":"UserLogin"},"UserResponse":{"properties":{"id":{"type":"integer","title":"Id"},"username":{"type":"string","title":"Username"},"email":{"type":"string","title":"Email"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"is_active":{"type":"boolean","title":"Is Active"}},"type":"object","required":["id","username","email","created_at","is_active"],"title":"UserResponse"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"}}}} \ No newline at end of file diff --git a/database.sqlite3 b/database.sqlite3 new file mode 100644 index 0000000000000000000000000000000000000000..9f8da7f67c114d41b3b719ac2c1510af25680f0e GIT binary patch literal 94208 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 literal 0 HcmV?d00001 diff --git a/public/avatar/교복조끼상의.png b/public/avatar/교복조끼상의.png new file mode 100644 index 0000000000000000000000000000000000000000..7e001cf54041549716957f1a90702b3f05afde94 GIT binary patch literal 297 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}jKx9jP7LeL$-HD>V0h^1 z;usR)o}40)aKPfgH{%|w1QQlFX9$te+Aw9ux%z;+AHN(;Wy|D@WfKgnYcpSOf9R*e z&UF3t6P{=;63xG{;bDDP6>oF%X1T+Sd#4|m_UiR5gP1)vEN>)c{Ma&6mxqy&(Pg&x z6sHMK*R5N}v&!pPLj3C&C!1v%xfv%s4cD_}X+QS1T3xd2{XO3;$|s5#G*%?`HAM0W zEndx>(8usohV8{WhA+p?d?;f$v3)@dgIC241`QU6oeV4;XE|L|oo2LdC}N1Wo|N{K wVXf49l~x8_8N*i%7X>7E8!rklFudHo7n1_n=8KbLh*2~7+P0EZ@W?EnA( literal 0 HcmV?d00001 diff --git a/public/avatar/교복조끼하의남.png b/public/avatar/교복조끼하의남.png new file mode 100644 index 0000000000000000000000000000000000000000..ac02326aa9a8e9fea35a28ced70d459a605aae9b GIT binary patch literal 183 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}jKx9jP7LeL$-HD>U?}i( zaSVxYe>=^P>wp0V!{qlCPyeqk_+-t?*CgWgYEnQ|U+0m}4xah#i{;ndXE?yXX3)UM zlfb|%@nc$};jyj1oL6P7Tp6^9x#NU#^USTe3~@S23$`&=Y`@9HAn~KUaSuxp*Sqx9 lsZ-y3cdz*L;r1QQP{u;VItMj51_lNOPgg&ebxsLQ3;^hEL0JF* literal 0 HcmV?d00001 diff --git a/public/avatar/교복조끼하의여.png b/public/avatar/교복조끼하의여.png new file mode 100644 index 0000000000000000000000000000000000000000..1a581d2e8b70b149ceaeca34a1ffb52852f243bf GIT binary patch literal 165 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}jKx9jP7LeL$-HD>V2Jm0 zaSVxYPfn3YIAC$$n{kg-f(eV8Gdhvc+Aw9uxq7GE6Y2WvCp^)dB+@LSpmeJLGH-rd zeTqaW!&&D9hsz9#r%z5)*A$$T%&2I)m`{S2k)gIlR?)Ej^L_>f1_n=8KbLh*2~7ZR CFfoMy literal 0 HcmV?d00001 diff --git a/public/avatar/교복하의남.png b/public/avatar/교복하의남.png new file mode 100644 index 0000000000000000000000000000000000000000..ebb7ac25a66c8846c9162cfe0ea6ba2215f48dda GIT binary patch literal 186 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}jKx9jP7LeL$-HD>U?}o* zaSVxYPfn3YIAC$$n{kg-f(eV8Gdhvc+Aw9uxq7GE6Y2WvCp^)dB+@LSpmeJLGH-rd zeaeE_%ns8IGMou4DQ7sb{lr3}R}B{hBqS9ZVmJ;IG47IBc!(=<-jb#ck><`&ZiY8) Zg^F$ag3dB9Ffe$!`njxgN@!wW007t)J&OPU literal 0 HcmV?d00001 diff --git a/public/avatar/교복하의여.png b/public/avatar/교복하의여.png new file mode 100644 index 0000000000000000000000000000000000000000..1a581d2e8b70b149ceaeca34a1ffb52852f243bf GIT binary patch literal 165 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}jKx9jP7LeL$-HD>V2Jm0 zaSVxYPfn3YIAC$$n{kg-f(eV8Gdhvc+Aw9uxq7GE6Y2WvCp^)dB+@LSpmeJLGH-rd zeTqaW!&&D9hsz9#r%z5)*A$$T%&2I)m`{S2k)gIlR?)Ej^L_>f1_n=8KbLh*2~7ZR CFfoMy literal 0 HcmV?d00001 diff --git a/public/avatar/남자.png b/public/avatar/남자.png new file mode 100644 index 0000000000000000000000000000000000000000..b09caaa189174827b341b22c716366cb15610ae4 GIT binary patch literal 441 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}jKx9jP7LeL$-HD>U@Y`> zaSVxYe>=_A@34bF>v8r5GhHRyB4I@-t8kHh46MEu4i@ef3??Em2Uw?COSN2z_@Z!Y zi%U`V7c-m9M%`t{f`mBtoK>5Bv-19)zbDl;J)ZXENk&qieEPiwtkC9rm%?%fwoA_-Mid3o>NJ^l13=ECBI zr`9q5IcM=@d;j{2e=au6WnPfvu%MjJX8-!Tc6LAR_1u%ta=#q%{?3&+my)KBB3TFb z)m@0nx6>?hGb)Hlb>DizI)mZQ{*-%V w3pX+*6g1Q`$>cgO7T4a~K#H7(8A5T-G@yG%+v$04)@|1^@s6 literal 0 HcmV?d00001 diff --git a/public/avatar/동잠상의.png b/public/avatar/동잠상의.png new file mode 100644 index 0000000000000000000000000000000000000000..61b4d6df1e4f3ba2f72aadeb162894d306f837ad GIT binary patch literal 270 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}jKx9jP7LeL$-HD>U^wpS z;usR){&w0%-WCHM*SUf(5(R%nKeAF=oZR_3lBLS+#7pJcl%<``dR=@sd5t{3%&$*U zb(C_?SfkJPfNux$y9VnI@q9h8;)Ufk-(urx>tmIz;`FVY>0fn``l{l3G-S@-mhld zz+B{Saqjm^$psp_8!c}KJP%7;XIR?EcEU11R6)Hieb0$TYo?v1U^kqV{lV0Dty}TU U#k8Xg3=9mOu6{1-oD!NC0KWlf@&Et; literal 0 HcmV?d00001 diff --git a/public/avatar/멜빵바지상의.png b/public/avatar/멜빵바지상의.png new file mode 100644 index 0000000000000000000000000000000000000000..6266856018b3522b1d139bebae68323019dfc8ab GIT binary patch literal 309 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}jKx9jP7LeL$-HD>V0i24 z;usR)o}40)aKPfgH{%|w1QQlFX9$te+At^aS$(BsVOzU@oKcMZCFb>RCb?b`36J{E z`KzA{cG14KA@T74J;&x2bQf4A1nsqUc5q<0_)KW2K+4Y5tF@Uo`CrTqd@|wY-fHuU zeF`@j`OWi^CVc8Nl!JKG!gLu#f81BRzU8?a0|Nttr>mdKI;Vst G1_l78fNWO) literal 0 HcmV?d00001 diff --git a/public/avatar/멜빵치마상의.png b/public/avatar/멜빵치마상의.png new file mode 100644 index 0000000000000000000000000000000000000000..d12ba999d1352923626550215282f0a952ce80dc GIT binary patch literal 303 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}jKx9jP7LeL$-HD>V0hu_ z;usR)o}40)aKPfgH{%|w1QQlFX9$te+At^aS$(BsVOzU@oRN)Gkc}Yh2C;ZlKoKdSdFc+-oC)&0E30sf=3G`EbL@V0h^1 z;usR){&t!n*C7W1*LuANp3CMP3bJwa`Y7;-@rY4tYe$95#I?`uCZ2saAvEYsgCfV| zEYG$-=K11fQaXQ3xSt4-!}V z9-5ahyDiwtxkxO*C}#Kdf|zj5M^0A-%oU#9fjqo!QmetSd(mr%nmG1%Dod)TMI|rouuX-qMI4hUJz`(%Z>FVdQ&MBdZfdK%; C2z%cE literal 0 HcmV?d00001 diff --git a/public/avatar/산타상의.png b/public/avatar/산타상의.png new file mode 100644 index 0000000000000000000000000000000000000000..037abddab8bee4520c893e874ab7a55a9603b4ae GIT binary patch literal 288 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}jKx9jP7LeL$-HD>V7TGw z;usR)o}40)aKPfgH{%|w1QQlFX9$te+OU7hmH!T$oNYfgrymUEP*zrc{Qv*||IIhJ zdwV6X?XNhv;p0u?Nj9!ql4d;JaEkjG$Bd^2g+a28Qc>bb6#C^gOh6x83 zXdHOTFyqe(<_sw&>G`(J?g#fO%kg-bSqDryz@)4^sfal+^TF%u>mRHUTe`~2fLCXC zt@Im(yu7?cXVkm|&vd`osrcnXV%ybi+dc>=sJ=*?KtrSq$0B;Nv8?paF& nBuWotaP+ht*ucZcAiBF&QHU?}r+ zaSVxYe>=^Q>wp3e%jW$8_Nuj+FP9&QU-CpjW6O;gk<-ss9Q1j%fg>^|!X}=>f!PF( zHcW36S={$;Lio9LOJmNm6|{UfRWMEIGDA+pS}s%B1KV=f3N*0&%XbLft-#ck literal 0 HcmV?d00001 diff --git a/public/avatar/여자.png b/public/avatar/여자.png new file mode 100644 index 0000000000000000000000000000000000000000..a916e81880ad1f78fb3c5065bc66f8afa9959461 GIT binary patch literal 549 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}jKx9jP7LeL$-HD>V7%+; z;usR){&w2N>_ZMB$Ku^uUyEpTI2%--4C?BhT^!TO7yCv&bUGhvxbg0tQ!c5N6mKYb z``}W85=Z#GmrJLA_PWO%W?d1yXHWJ0_xsA<_pqzW#ktnLj0o2hFP|vl{yGbi!>hN;a3oHUyBzm{)GC$}q8fSN9^Y!()PX>N4?-w2VBc&VJ!; zL-e)Mva^LTsg?z77Sb^?}X|o1EDLQRTvl;7(8A5T-G@yG%+v$ E08e4*GXMYp literal 0 HcmV?d00001 diff --git a/public/avatar/청바지하의.png b/public/avatar/청바지하의.png new file mode 100644 index 0000000000000000000000000000000000000000..66473e8d93b3d713924e68e939ade3dd5369a0d0 GIT binary patch literal 189 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}jKx9jP7LeL$-HD>U?}x; zaSVxYPfn3YIAC$$n{kg-f(eV8Gdhvc+OQ}2LA_J%iT2;uCqL1gByw2hz~Uvn5Bv1L zuWLG*@s44}Qv+_tX-eG}uQDo}c35cis^Ox5M5JOv48wsU#$6H%4{=4#Thi1a(%c!! c%}{c(P;ssC<1-8l3=E#GelF{r5}Fto0JBm;EC2ui literal 0 HcmV?d00001 diff --git a/public/funiture/검정 노트북1-0.png b/public/funiture/검정 노트북1-0.png new file mode 100644 index 0000000000000000000000000000000000000000..da7660a5b779b8b2caa6c7db7fcde8dc22988863 GIT binary patch literal 244 zcmeAS@N?(olHy`uVBq!ia0y~yV2}i14mJh`h9fUqlNlHo7>k44ofy`glX=O&z_8BK z#WBRA^X;{bybTHhtQQV@atKFExM96xZ)dBpg!#cP7Ebm5d@ugYb^F)7NI_5{y|&;Q z`bP0l+XkKZOmor literal 0 HcmV?d00001 diff --git a/public/funiture/검정 노트북1-180.png b/public/funiture/검정 노트북1-180.png new file mode 100644 index 0000000000000000000000000000000000000000..7d30b16fea6450518dc2d5654462baad2af499a0 GIT binary patch literal 251 zcmeAS@N?(olHy`uVBq!ia0y~yV31^BU=ZP8V_;yYD4({Mfq{XsILO_JVcj{ImkbOH zTRmMILo9mtUbW?GP~c&^kYvO0idDwoo!p(fFCMV|*~zIliDTh~ML%@;wED$dRxG`= zHAKqDZO4H+JtgZ&%+3?_H)?!hb#uFykfXw?9mJ5=bfWCc3tK<-Qx_iiUR|i~_nM>D zIzwTL-cBKA-`5-)gPCJ1vP{o^dCTx%rA}q}-M5?8NvJjK>?ceUe^zZ?oSyrMfq{X+)78&q Iol`;+0QIP2>;M1& literal 0 HcmV?d00001 diff --git a/public/funiture/검정 노트북1-270.png b/public/funiture/검정 노트북1-270.png new file mode 100644 index 0000000000000000000000000000000000000000..23e8994f1eb83b0032cd0b214896b78ce269eefe GIT binary patch literal 245 zcmeAS@N?(olHy`uVBq!ia0y~yV31^BU=ZP8V_;yYD4({Mfq{XsILO_JVcj{ImkbOH z>pfi@Lo9l?PO;`|HV|+r59D(?!5Sp7^!bCAf+9N^X3Ta-6?ypg=8fQ6k8IDLU|N{8 z>)Kleh6rJ~ppc?g@u>wLl!SQeypvkfJ%b)9`kr&YsxnQid;W>y(sc~-_3=OUunYdH z`u61SVW#bAAB8o$W)&2yJG!4?hS_qLX7A!mNA5e9T2Aje+i^WSc-6^WXP8ddE zFMAIqmI(&Amv?V_IrrJUTTlbyhk4Xe$2_RBX+rL(~Dde2QF^`?uf%O zB{!bLB-%?)u;$6@47z61_ulMge1xKA4Z{`z(PxiT6dZ4D;3$}2mLqq1e}ILyd2j2< U!$PSd3=9kmp00i_>zopr0NSr)OaK4? literal 0 HcmV?d00001 diff --git a/public/funiture/검정 노트북2-0.png b/public/funiture/검정 노트북2-0.png new file mode 100644 index 0000000000000000000000000000000000000000..da7660a5b779b8b2caa6c7db7fcde8dc22988863 GIT binary patch literal 244 zcmeAS@N?(olHy`uVBq!ia0y~yV2}i14mJh`h9fUqlNlHo7>k44ofy`glX=O&z_8BK z#WBRA^X;{bybTHhtQQV@atKFExM96xZ)dBpg!#cP7Ebm5d@ugYb^F)7NI_5{y|&;Q z`bP0l+XkKZOmor literal 0 HcmV?d00001 diff --git a/public/funiture/검정 노트북2-180.png b/public/funiture/검정 노트북2-180.png new file mode 100644 index 0000000000000000000000000000000000000000..7ea3580526c2f8af101f7873841aeaf752926ae4 GIT binary patch literal 260 zcmeAS@N?(olHy`uVBq!ia0y~yV31^BU=ZP8V_;yYD4({Mfq{XsILO_JVcj{ImkbOH z`#fD7Lo9mtUiIc{RuEu&Fn<~Q$3jLisc$lKY%|4U7WB`)AlexqA))oxT+QvTL|TZ> z~~MB-uqsSNM~U1%Hm(-pYoV_%Q@@L7LAn?5ARxj+KO4Vv_vP7>5SSoCwCpK z?&hr_LX&bsw8Nq*J+{Oy4UpLSY0Jl(f`0mXiCf#-H`tZ^|MA^LBHhD|;b+z3j|vLe Q3=9kmp00i_>zopr0A}rE`v3p{ literal 0 HcmV?d00001 diff --git a/public/funiture/검정 노트북2-270.png b/public/funiture/검정 노트북2-270.png new file mode 100644 index 0000000000000000000000000000000000000000..98db1d1ceadb8c35bedb5622db00eda3fc5adfe0 GIT binary patch literal 248 zcmeAS@N?(olHy`uVBq!ia0y~yV31^BU=ZP8V_;yYD4({Mfq{XsILO_JVcj{ImkbOH zn><|{Lo9l?UbYr$RuE`-sQTDZKz{<0dM#hx`;3RISMIcg%x1d5&ay3v`(OSHM`qdM zk@5@-KIbj`f>rv=T~|~HyLA0;&3GK@kty>$uy}>^qP<5e^PhHXwzGJBxJu_$!5`a# zLIwssIrhT&$7Z^(`0@Iu+QQ5^5BF?WnWqp`V=E@O=vc<1OTIgH+U+*{xO(MYPrbh1 z`4^K^KeAj*keSjwnWO!wfS#U`NSKhm+@H_c=js?8SrWHz=r^)qU|?YIboFyt=akR{ E0FUlpFaQ7m literal 0 HcmV?d00001 diff --git a/public/funiture/검정 노트북2-90.png b/public/funiture/검정 노트북2-90.png new file mode 100644 index 0000000000000000000000000000000000000000..e4378c8b9e43bf9937516bb052231d5aea3be1e7 GIT binary patch literal 254 zcmeAS@N?(olHy`uVBq!ia0y~yV31&7V36csV_;y=)_xbuz`(#*9OUlAujFrM?E3&(7fjI`$t;U4eqt9GZ0C$G8QSDJ5}-7e;y&_ z3kI(@9WA}N=-It?)0|of(F;OhjQd;mGua+exnNwwti0&w8Rf_I2{sEX6_)wC+O2=g z$?!qXg~4Kd?V@+H*Bm!#J^fK{LWh*b;d`xFwrihG;P6P~Ok&KQ(Y$K<9ql>K*s9tO z<_4agH~nM(^f`KKCWx$K&~<6uX~F3+!AyrqW(n`?k44ofy`glX=O&z_8BK z#WBRA^X;{bybTHhtQQV@atKFExM96xZ)dBpg!#cP7Ebm5d@ugYb^F)7NI_5{y|&;Q z`bP0l+XkKZOmor literal 0 HcmV?d00001 diff --git a/public/funiture/검정 노트북3-180.png b/public/funiture/검정 노트북3-180.png new file mode 100644 index 0000000000000000000000000000000000000000..e4378c8b9e43bf9937516bb052231d5aea3be1e7 GIT binary patch literal 254 zcmeAS@N?(olHy`uVBq!ia0y~yV31&7V36csV_;y=)_xbuz`(#*9OUlAujFrM?E3&(7fjI`$t;U4eqt9GZ0C$G8QSDJ5}-7e;y&_ z3kI(@9WA}N=-It?)0|of(F;OhjQd;mGua+exnNwwti0&w8Rf_I2{sEX6_)wC+O2=g z$?!qXg~4Kd?V@+H*Bm!#J^fK{LWh*b;d`xFwrihG;P6P~Ok&KQ(Y$K<9ql>K*s9tO z<_4agH~nM(^f`KKCWx$K&~<6uX~F3+!AyrqW(n`?OqgvkwY$N7H(Ok)xb@=gn|Q^S zZ9K<3L;IoPa<6S4f>kwtXigIPGr@&x{iKYCirZ%?<{t6QidM+H6!Bd8^&boVt$gn+ zEe;4)oXCsSthoNI{(I`&3cENfPfojY%(1sOuMuvDU`SB;5FwmtcYnL#?eO5NMUCyB z^I}zJvhADfkzyIhGjGb16hlwGxG76gq;^<6e184RKZce?VT(j(zHw$?U|{fc^>bP0 Hl+XkK93o-d literal 0 HcmV?d00001 diff --git a/public/funiture/검정 노트북3-90.png b/public/funiture/검정 노트북3-90.png new file mode 100644 index 0000000000000000000000000000000000000000..84d359a3eca5df20925ac2b634111bc512aa4ad9 GIT binary patch literal 259 zcmeAS@N?(olHy`uVBq!ia0y~yV31^BU=ZP8V_;yYD4({Mfq{XsILO_JVcj{ImkbOH zdp%toLo9mtUNz)vQ4nCg(Em|kT{R=O`8T;a^D+*yUfIhT?aQRn!+hdjo7;0kBgdY@ zZ;mCFWk`rJKQ9kIJ5ek`s8VRR>%0R;Jb0(|PDzkukh$LW_?DMWV3Qw5)qcB0)0f^A zsn<(3ot7z@Sj+jqnPG#^>c<-%`PH;cdbMUX;|h(n$Fd|=3*K+%V#qpwH2$xE+?J`$ zg$$znR-MX6gRGZdxVd5R@x(jl9yh1E&ye#=EI+ClIsLBvKU>CW#wzy7i_4$+E|R^; Qz`(%Z>FVdQ&MBb@0P#O$%>V!Z literal 0 HcmV?d00001 diff --git a/public/funiture/나무 탁자-90.png b/public/funiture/나무 탁자-90.png new file mode 100644 index 0000000000000000000000000000000000000000..6b419e1dfcca1f2fe41ec4fc991dff079f2eb9ae GIT binary patch literal 511 zcmeAS@N?(olHy`uVBq!ia0y~yV9)|#4mJh`hNFj1Ml&!lFct^7J29*~C-ahlfpMp& zi(^Pc>)V;OL5B?lTIWla%QQ_gzEHrR6}ibw$y*K`p($Dk!gjP(j#<)zL|xFo*7 zJ6B4qB`5OMRV~T1PrD+1e|EjKCWSR1EHErNFl=$zofvI_gSpqVt4x?2?r)vx_UDCy zaYKE{{|_7*4Bc~U8@44i-t;qjaQinq!-HqPv`)lx$>hA5eelYGIOTUj%bCjfiWqY< znf>LCT}#kH-K3Jo%x^Q#cM&>1K%RYYY_TJ+AcX#U~XAOqyc31AR zn3&#t-OroDY~{$$>+{WfLid7|jc+CI@b5mlyN~4gtGpE2&G7wjUfG)5 zECz>r<+))~uAcBc6Z=TjWB#voXOFx+`TY1=$N6cuFPHu3VVia?&OoD6=%Scd)Zs6# z&aS2rwzj7od~4--7WLKYIsEGV@uvCqH zD;L+Fz9=pbvVZ$iS%b@}CJGBHgOj$YzrDu7kbaACDSPJpD~`c0Syru;>6`0*Ylf=P z=gVPP&(G^7XWY*=N}T&s{q4&O4GVw%_wAkMu(g!w>a)V-zlbQ@f+UjMj_!D1B=GZh$jW#+wO{|KE+l$+8Lv+q*9^I*X&E_5Eu3*ji z_O^{-_V+`~cO?JuP1^I__s?e!r3GtpMW)}@(A)aBEvk{@-RsZIaZ?!romJ^X}BAwYi3S zr4qC?GB?LPtl3+seub%|Y0?hkJK_q`Q1n#^yLc;k+T>W(n11!?Y$cR zOS!-Od^Cv1Q|psX!8CQwg3Fur=d3;Usbr_U%jVna3M)$u1C@TYc-qwLw7z~hS7P+%>!&VXXt?v||FOlwE4HZxgTe~DWM4f`n2We literal 0 HcmV?d00001 diff --git a/public/funiture/노트북1-0.png b/public/funiture/노트북1-0.png new file mode 100644 index 0000000000000000000000000000000000000000..843e71d9060a2f02e5e68514fee21770c0a559fb GIT binary patch literal 303 zcmeAS@N?(olHy`uVBq!ia0y~yV2}i14mJh`h9fUqlNlHo7>k44ofy`glX=O&!0^)3 z#WBRA^XWBRzC#WoEDtnS9++4l&BNZ1P{3ir*X%HX%Sk}gbjPbMD<5X|0|jf89!$)= z{CDQvMG{wY%sy{Dc{-2r_!HO2=dO{v--R0|m@W5w)_U|!^iof@ntePBX0Jo9SU+m6 zROS)u*^#hU(Te9y$;KHC_Rd%SNIt5b(sG literal 0 HcmV?d00001 diff --git a/public/funiture/노트북1-180.png b/public/funiture/노트북1-180.png new file mode 100644 index 0000000000000000000000000000000000000000..a137f1037cde036b273d8f853d69bc534d9f31a5 GIT binary patch literal 269 zcmeAS@N?(olHy`uVBq!ia0y~yV31^BU=ZP8V_;yYD4({Mfq{XsILO_JVcj{ImkbOH z$30yfLo9leXY8!_`G02j^#AD#6cb#wE7+P%n)qzmg+oSjrUhI!YMK^s*l3aN!XrkL zbQO;qsTJuch(6f5Wb-!h<#!JGT6gj>iq*7DHy3|=dh^4(&PE4jNZcrUVZqECWME`uU|?|JkP@59{Y5Sk zn$sR`X0X&S)KR=@6r*3C5fs_#26gj`$k9dTJF8B>mNQnOIq_u=ZJ)#&Wkl~k7fzB z`4>p`ofbbKX7Jzx?;RnhHuj%Y!dp1R6B<>$Yubb#3&$wfnoXK0X#4gs&(SnVO|hlN z-3~c(o>RDH6vT6ULyN@e50Ncr3+7CFu$gDJ>JJ|E3{Jh%9)@#L42nN~`u{|10>kdF XIbTgqdS7HbP0l+XkKWe#Wf literal 0 HcmV?d00001 diff --git a/public/funiture/노트북1-90.png b/public/funiture/노트북1-90.png new file mode 100644 index 0000000000000000000000000000000000000000..891e8afbefe144585eca4f24db2c11dcb252eac3 GIT binary patch literal 285 zcmeAS@N?(olHy`uVBq!ia0y~yV31&7V36csV_;y=)_xbuz`(#*9OUlAuz*!-As(G?rzr{@G7xaBpApA(nDNDxD~cE9G&w2?NW_%7%C@2oHnQ29FIaHrgi`(^xGJ`Z=stRKLM_ zjp_D^QzgPHly~a6sLy=%Z5J~`U;E$xhZT0t@lTt0fSG^g>Pwv#o*@EE`|a;fT(Hio z%+#?_#OHU3Y1k9apaaE=l+-J%*cp0sO|2BzZ~Rj-UYokMqxrIL8Sh#Rwr?y!g6w<; qBOQHISlw9_CyK1;d#3C1nK|{^((ZXu8i@=H3=E#GelF{r5}E*cT55g( literal 0 HcmV?d00001 diff --git a/public/funiture/노트북2-0.png b/public/funiture/노트북2-0.png new file mode 100644 index 0000000000000000000000000000000000000000..843e71d9060a2f02e5e68514fee21770c0a559fb GIT binary patch literal 303 zcmeAS@N?(olHy`uVBq!ia0y~yV2}i14mJh`h9fUqlNlHo7>k44ofy`glX=O&!0^)3 z#WBRA^XWBRzC#WoEDtnS9++4l&BNZ1P{3ir*X%HX%Sk}gbjPbMD<5X|0|jf89!$)= z{CDQvMG{wY%sy{Dc{-2r_!HO2=dO{v--R0|m@W5w)_U|!^iof@ntePBX0Jo9SU+m6 zROS)u*^#hU(Te9y$;KHC_Rd%SNIt5b(sG literal 0 HcmV?d00001 diff --git a/public/funiture/노트북2-180.png b/public/funiture/노트북2-180.png new file mode 100644 index 0000000000000000000000000000000000000000..48cb9b325959f8c5e501d775a1bbe80ccb571ce2 GIT binary patch literal 288 zcmeAS@N?(olHy`uVBq!ia0y~yV31^BU=ZP8V_;yYD4({Mfq{XsILO_JVcj{ImkbOH zw>(`OLo9l?Ue)Dmb`W5Fu-#X`^`Kc}K;!BRt!f6ARa~JLnH4yh+8ZvgbidrVViwyA zgEvgSc^D7X{673n>1?;%*={+p#mf%-tqQy*D1Ad`llr!fH;tLf(FVyWyk!y0Gum9| z^5N=n8MnhKqUKI2K3e-Um$`ovzjVFv;0j6cOa=x922WQ%mvv4FO#q;iZqxt( literal 0 HcmV?d00001 diff --git a/public/funiture/노트북2-270.png b/public/funiture/노트북2-270.png new file mode 100644 index 0000000000000000000000000000000000000000..53d7068849e03992835a009d7319ceae9c632ba2 GIT binary patch literal 270 zcmeAS@N?(olHy`uVBq!ia0y~yV31^BU=ZP8V_;yYD4({Mfq{XsILO_JVcj{ImkbOH zCp=voLo9l?URfyAq9D-l@aeO-SEp28V<4ZO)Zb=6*qoVX_4Mu?EQ0vgwoVLtD{D1 zYh1K)mt1=GwZ^6W?%%mx%nSjA<{8%?+g#uftFPauVRDXH=klwgwkjg|ue3N4mEUa5 zdBxS+?&sutf2-4u^7)4>0`6~pZeO97WaxLtImv))SJz^W)>y?5n~nqt^>g!b?R{P` b|71>GRkZ4*fB#Ab1_lOCS3j3^P6z*!-As(G?rzr{@G7xaBpApA(nDNDxD~cE9G&w2?NW_%7%C@2oHnQ29FIaHrgi`(^xGJ`Z=stRKLM_ zjp_D^QzgPHly~a6sLy=%Z5J~`U;E$xhZT0t@lTt0fSG^g>Pwv#o*@EE`|a;fT(Hio z%+#?_#OHU3Y1k9apaaE=l+-J%*cp0sO|2BzZ~Rj-UYokMqxrIL8Sh#Rwr?y!g6w<; qBOQHISlw9_CyK1;d#3C1nK|{^((ZXu8i@=H3=E#GelF{r5}E*cT55g( literal 0 HcmV?d00001 diff --git a/public/funiture/노트북3-0.png b/public/funiture/노트북3-0.png new file mode 100644 index 0000000000000000000000000000000000000000..843e71d9060a2f02e5e68514fee21770c0a559fb GIT binary patch literal 303 zcmeAS@N?(olHy`uVBq!ia0y~yV2}i14mJh`h9fUqlNlHo7>k44ofy`glX=O&!0^)3 z#WBRA^XWBRzC#WoEDtnS9++4l&BNZ1P{3ir*X%HX%Sk}gbjPbMD<5X|0|jf89!$)= z{CDQvMG{wY%sy{Dc{-2r_!HO2=dO{v--R0|m@W5w)_U|!^iof@ntePBX0Jo9SU+m6 zROS)u*^#hU(Te9y$;KHC_Rd%SNIt5b(sG literal 0 HcmV?d00001 diff --git a/public/funiture/노트북3-180.png b/public/funiture/노트북3-180.png new file mode 100644 index 0000000000000000000000000000000000000000..fb6f6f90aa37574a9a2dd62ab09dfeb3d07dbf2d GIT binary patch literal 296 zcmeAS@N?(olHy`uVBq!ia0y~yV31^BU=ZP8V_;yYD4({Mfq{XsILO_JVcj{ImkbOH zk33x*Lo9l?UR}u7>uk8ST64;?ZAWddm81 zK3xq?Ts5_PKU>uFm-5$ae(XEhDFVdQ&MBb@ E07f)^b^rhX literal 0 HcmV?d00001 diff --git a/public/funiture/노트북3-270.png b/public/funiture/노트북3-270.png new file mode 100644 index 0000000000000000000000000000000000000000..c06c4046a3bbc6d78e48620cf9c32d50b150bd0a GIT binary patch literal 263 zcmeAS@N?(olHy`uVBq!ia0y~yV31^BU=ZP8V_;yYD4({Mfq{XsILO_JVcj{ImkbOH z2R&UJLo9l?UeOh5HV|lgm~XvTWEs0g^FhT6G7A=Qg|z*!-As(G?rzr{@G7xaBpApA(nDNDxD~cE9G&w2?NW_%7%C@2oHnQ29FIaHrgi`(^xGJ`Z=stRKLM_ zjp_D^QzgPHly~a6sLy=%Z5J~`U;E$xhZT0t@lTt0fSG^g>Pwv#o*@EE`|a;fT(Hio z%+#?_#OHU3Y1k9apaaE=l+-J%*cp0sO|2BzZ~Rj-UYokMqxrIL8Sh#Rwr?y!g6w<; qBOQHISlw9_CyK1;d#3C1nK|{^((ZXu8i@=H3=E#GelF{r5}E*cT55g( literal 0 HcmV?d00001 diff --git a/public/funiture/녹색 침대-0.png b/public/funiture/녹색 침대-0.png new file mode 100644 index 0000000000000000000000000000000000000000..ded87ee86767d3e19b0a9f8f0d8568bef346837f GIT binary patch literal 674 zcmeAS@N?(olHy`uVBq!ia0y~yV6bCgU@+ofV_;xlVa~8;U|?V@4sv&5Sa(k5B?ALf zjHioZNJit+S%%)sh7xV}Pvt6ElzeCBu-f^Gzu=|PmJ1iT_C^*IlnKnKULY&O!mX$G zui?=$3ymvh4<0=0S%1Lt#`+~6FL~?5>+SqJv(LeK-uI%j>pONAD$%$7V!~}W7sQ&r!iI>4+`u+&E=R(RK ztvH0E9+e8IiFI8MoN+>A{bmEftyXuxeEYSkv0ll?WkQRmkg2Ge62~ExsPx37Z$0_B zYZ!tv`5qqJz`KTN_usQ34DTjAZ!2Bivth~_rRGFwh7H@y-|y_+z?2{y&MACF&WqvN zqsl`@3t0jp?u0}fD`zv~Gwgyne_im34uLessjKQihq2niFr& z-q5p}!RV;-M6ri_4SS1)r|>Su6OSqnRaV?@ zG^}OGY2|!h9^+=p%n_Y<=(p_jiRlMYi})ETDt*X%DOe@eljpHFnGH9xvXn72oIIS5aAh~GIM$j3)_xZS{{WSC>+nYEpClh;^bY- zDRE2u5-0CsS~KU)@(rF>8LxQWZVuCOys=~zgCL9d>nWTUUVaT`sHm*!`B5#?WU}S> z`rf0DGlUxsolH67oVBEH^{$JnHgHZ*=l*E2A@ytmy- zY>h=`iSn7rYF2xjuei-%(Y5oR)$mk3M=1H{F`kF4?mybwkUtBFSK|&z_Nm<--0}z1EYrjP*1d^n5(0h^R@&=LsD% zsCsFgT;Cry3#&Wq(=O??c=qg<4C^hPlR15ffWQIMSHk8g6ANpWGez(l>=sk_{$!gr zBUk^Lh3p!(tJ|dx+*DHC!f-A;eId(=oJcKOho`R#JsH1rZrRq$F`rRm4S(j=_Xn;> zDtOPRxLx&2-$8O4r||pgyxB}52i;~=h^wbHY`(bk>-}efYDq^r=x{w)Sp`1%Kp9o-bdfu%u}`U?$KTB?kii>o$h_R^#99_zVl@Y zdLBPM)D&lI{;<~J^dXY z7TjNaeJk^ut`EoG-z<8_v7%MLjv=O|N+%YqAk%#0%VCbe+JZ#C3(FwS8t&~8{~uuw#O5>w2*c}&xm*G4`3J3m~(bIuL1 z2QUBeZV*ve{o&ppiOCl)TozKl#5SXswYq1`p|z{i84fJC%~)bzI5U^=)M@5d z-F^0|Q#ZHV?aqV`*K)5N_2oLA=zC|HLEw%ZxrvJm3d37CA3s{hDSXX8&n56sOXtNoWfE0>nh%@Q+aoN zruLzhYmv6+c?x`Ic$8XtOD9}-YoYFwva4^l4X2pvI%x?@hQFduUwtuiv(4bJ65Msp Ze&Xupee6N)&I}9;44$rjF6*2UngB2P1mgez literal 0 HcmV?d00001 diff --git a/public/funiture/녹색 침대-90.png b/public/funiture/녹색 침대-90.png new file mode 100644 index 0000000000000000000000000000000000000000..a09a8e5de14e41d34b5827f78b277072b5f91d1d GIT binary patch literal 677 zcmeAS@N?(olHy`uVBq!ia0y~yV6bCgU@+ofV_;xlVa~8;U|?V@4sv&5Sa(k5B?ALf zyr+v}NJit+S%&_%9VFV~!xOu9ZT!xzkdUPFr$HxDOHh;9S@`73t`>pf7Nu0bwvq$~ zrq0$**;3|>E?L|8WN%o7oaDD)tI+)&bA01_>)$!^PL}tbtBjlf)<2zDbm85XS|>l+ zdGM)uMubF3F-Tov_Huf7v*eH-E5r8i>GNLR@az8mH*krrWW(i0)z)|m*@&M zTz+)KjbW;Q`Xt5>uQ?tp0iK0PLJmuhdR}9=HFw>rRtrzA1@HTJ$ci{^6;iKaxbyC} z@``6nn?DL16P;k9TW=mTFK*6%1G&$I`&zQ}n!e@OlsxYV{&9Kwi=7r$e|b1q1(ub3 zR7pHk_maU&*kAbCM7{+DAJ-hR3Styd%hOtuEY(n2n3*_t4`YPzcHK3TO&JP5E@~~k z#_Qm-Cns_4{%H0C(G2&k$~XQ!_Glfa{oh;tTO=F&@(QoFUOu4{SDLtKTSaV(=cf}&%QY4M8Vtg9oGXZMB`#x(;p{pSYKWv_Hy^$U0?Q0 z+rK(y!Zb0y^(#JYf0+90Qg}iR=j0{Rxt4a`7V}$N@NrYCXX2xE9Fy4?{_G6A_U_d> zPGSCAO8Y_>)^SZ{W61e)n=fud;nPDZ4K|ltIVayRJ;&_7PoBw=>4aA776Z>cJ7=;@ zaEm;oBJloabHc9n(|ZqY%wb67p4?V;;s4ZfE+)nuNH5oM8RO mqDFj+b!_V6+eOlQ7|!pVx#Q*DRA&YT1_n=8KbLh*2~7aOgDEfo literal 0 HcmV?d00001 diff --git a/public/funiture/녹색 탁자.png b/public/funiture/녹색 탁자.png new file mode 100644 index 0000000000000000000000000000000000000000..ff88989204ece64f423d292eb4c1a16186b9adf3 GIT binary patch literal 427 zcmeAS@N?(olHy`uVBq!ia0y~yV9;V$9_W-HW;TnQcuc%lAM3I2lfCW?|THKUed6 z!8{k{Qk{b52YnspYTu}upc`;q^v2< z*B**sYU+Ko$$Y^~hQjFO#+DYM?mCZBx2pYO`p+sN%y8z5!_8F9x_l$E9efdY<7>6< zIo3AMZYaI#bo0Tw1J?q=H)vmw%HmFAw06GTF#nvs$pYh$Dh|8P4M8Vnu&`;I7qSxa zSy7_Z_ePUZKA`ib$wT2&c}<(7#Y^_zX6vr-yw9MQ8JsasBIKLGWs`N`_HAk!yE#wg jnFLhX{S#zt$iE)_?EJ1H$D$b+7#KWV{an^LB{Ts5%Nnm9 literal 0 HcmV?d00001 diff --git a/public/funiture/미니 냉장고-0.png b/public/funiture/미니 냉장고-0.png new file mode 100644 index 0000000000000000000000000000000000000000..17dfebe86876133af3a2249ff4d1188b6f9914ab GIT binary patch literal 488 zcmeAS@N?(olHy`uVBq!ia0y~yV9;h@V9?@V1Cfl2QW+Q+7>k44ofy`glX=O&z_`fM z#W5tJ_3cgTyk-ZH)`!kdCdpO^-fPfSTI#fD*%_uuN+ppDv07peZ%xwnUbabT>5?-{ zo0z}*P4;eE&G@X4UE_!L?Bg$loxbt72;^+{f4A%H*{yvl$HXODCbU2H+--k8$bsQ) z=_iRv&%4X4PKuo@c8!*O)BWV;qF%m9Zl8QEHd{L@S0-n?J+^Y<9=np~r|)>kxo^L5 z*KVi%{(X!L^W-MqY}oZl$F+FvVvhQNuUYf-O*b%nd49e8_f9SD919VyBE2nLA-8$v znyBvLUt!j<)M=6Lgeij4COO?^xVmP;6z*H1E1tD1^|>JAaf;jf<%LNeUM$`#Us&Ap z;^Sqg5Rf-a&^8N!pmX~-n{*#<(dK@xy_)H>&f5phPfMj``j&fM&sM76KKU-&*{yw_ zbaK@dz1QvKeN@r?d1;)MQOi`r%OWoYJviZ#4b zY@elnOZ@c2DHoe9qqk^p#DUD zyJ53&Ql#^OZ|#q(GizU1H{Y&cY`8Vcc#<%>?nzAA TvG*k44ofy`glX=O&z&Oj( z#W5tJ_3cgjyk-ND;~(cQ?zz*zTyiF2<*O-Pb0^HObWz_X*RWRh6r)vI-;|l0uBT4S zU@l;O|MJl07u=lx=k>PNY`@`P*ClXpfx?w%rPVK`)}M0ntUdmQS+HokeaSiXLKcpN z>hcTtPfm8|zgMU;$(-G`qJ5{wJ&}_4ZI?XmNqjlWo1pEuHn9Kf9}~BA@>!hoYsn8HofZ{wEHikr%bHa;ctqW zatv|v<})yy+n79|=8R++*Q9h=?Zzc*5>+Qo5q$>*BZb>Qc+H4lb4h4>h=_@0<)?c*o@OYGQv0diR^d0%LWkio_rWu~MjDG)541QL6gPh9&1N>(DBzPdVd~GrW!oJ; zhX+WjnBBh1X7DfZmV)+AZm}A(35+c|KXeqrI3hn>bks6C#J2nrTT_PbtYFT$A$t{5 z4!SdPwoPE2&KGo4p+_`Et3#?qXNSpzQ#Ro>X%h|#MGG^tHqH2(xocOugwDpFPP!8= zl%Dui#U}J7H0SGD?>Fv@g|ZX>E8M!g^!J*4*%+BGKQ5- zTSX>Z*stF9d1mTLg*~3!cX_Ow4VE?@VVd!_!qH%-;}(V)2^?zX9ci=HUEBS84)YS* z*bqgFT@xOe*{F70TVcScw%^WqGFQvug)d*N$mi(znO3rXp`e+LW6;`=SR=E8vlcUH zy0!FN<1l>Aem$^|KcPVG;T7)IBTYXXelQqpjz8Gmw8No=!QiIcxetsF*UhjF;1py& zkW!y>oYlq2!KciS!KaMl7^{m@27|#-2ZQhD{CqjwUR$1fq%gy9!p8o#Yq=F01$sC) m?VBh5StWndlDcib#UJpioM6-wd&I!Nz~JfX=d#Wzp$PzNpat3h literal 0 HcmV?d00001 diff --git a/public/funiture/박스-90.png b/public/funiture/박스-90.png new file mode 100644 index 0000000000000000000000000000000000000000..3770986d26f7441206b1ce9604b5be4405985a88 GIT binary patch literal 612 zcmeAS@N?(olHy`uVBq!ia0y~yU~pn!V9@1YV_;yA`nETnfq{XsILO_JVcj{ImkbO{ za-J@ZAsLNNZyDwtG7vfTk-wAYOi${|z8gE(!XGfqX=g5AT{n?;NHtBZ%RecvETP3TF?-4KW;I%z@1l*bkZ#=&rdxYm=2_E=N7Q&eb%>L z_>fdXye31p9`9?0nlGL`>+@E9>-nL=u>E<@50{1)ZCN{`7KlX^2W6gR_`mo3wM!A} z#OmuUj5^F5K8aQ9Oi*NSDz&p~XOfgUFqikm=A+k`B)JuS)E%kYUHQQ+So`jY2*!k) z?d$GHCh<0i${!APT*G9r(L60l;Tq!&mFNGRy@J{m?K2t7T8%R@1$y6ZFk#4^YpTGY zWGTIcG2-j|xZNP{8pDhm2~G-nEujo*b{gVGVx__uuU!83ZcE92HrvPT VdlO7vF)%PNc)I$ztaD0e0su@6|Cs;) literal 0 HcmV?d00001 diff --git a/public/funiture/분홍색 탁자.png b/public/funiture/분홍색 탁자.png new file mode 100644 index 0000000000000000000000000000000000000000..8d530bb5bb40f474fc271bdb91261a3a7bbb04e4 GIT binary patch literal 423 zcmeAS@N?(olHy`uVBq!ia0y~yV9;V!R) z*+bdOe$GhuVgC94%<&(}eV>{bc9!nZy!LTf!g}juU6mcVU+U}y7Be&)w&Rv~ZLR-_ zAw;#3OW?rX{5+;tF$d@7zv8;`m38~R8=@;-bLH*n;JvbyHQN6d+pAdz_}S<4Ub%VT z+0hFQbJ^Jc^R5v7z@z%<^KWj355G1^g@u*Eq@&#^K3&btdL{%3_{rF0xJx9?!w zY0p_+d=eHL9`pCMC@#){MD>7t1*EG&< z*e3NnP;7_(2Gc8|Z@Av@yyZ$`taiTLP=C%{>Vl-!)kgp4%Dft_J+1+as+C^uO`KEL zO`o$@b$9zVHI3bzr}9h! gs_gy=GB(85)xOQR@2Gy2fq{X+)78&qol`;+0B)JHw*UYD literal 0 HcmV?d00001 diff --git a/public/funiture/빨간 침대-0.png b/public/funiture/빨간 침대-0.png new file mode 100644 index 0000000000000000000000000000000000000000..5c6314b67110fde666450a99e1f095e33c0b267c GIT binary patch literal 695 zcmeAS@N?(olHy`uVBq!ia0y~yV6bCgU@+ofV_;xlVa~8;U|?V@4sv&5Sa(k5B?ALf zp{I*uNJit+S^KkZJ4m#}i{>t@eyw_wxs}Z(onuO0oRP$yk`3K=6ur0m$=d9wczL01 zfugs9vqlQfPvJ)kO{x{Vz0=!y7^lB}6z-9(y{Y8Br~1>GOD0?Vto-`=^W2767hZmw zl2U(O#d@-eo|Y~z!@iRCNdXo%f6l3~GCW_dJ}>jWUpIeKVN$FS!}6oI*Uw{SSa!X< zv$T_8j+nX`(~4G$i98F!9=RwrM0E*IX2{a@`^0wP<+l*!Bc4$V%?W3ot`NwYVsVlA z!6yX?=iD;_er^Wq8kR`Dd*_!~UtpGYvC2YnXYn!3nh#0Z7wf)! z<7Mbz5m;XI(Ij!x{++xL91Dy->Lkj(WbhI{uf0ZD)FJcHvO`wO7$d}|i(S){YA`Ll zeaNbkSwLJrIwJip!;vGa#ja(Ze||uzVXnUYv~AMeyVYu{KWlHiH}Cw%{G)ZPM`Oj$ zDQ&N~+j{cWBVR$anU8#h)mA?86`c3Wt}JYeey6#o1VdcCb=#qw%xaZ;E)S1?n58A- z=XP=1zvKR$+df|wJ}>?5ou>GbrLB*ZSKTqUI}`JhqenM!lG)0DnLBbH>UfE-kD4(> z?Om6_N5%)Q??-3*mtJq_Y(Hwf=W7A~k$)#}Oyq9{?wLGb0KmXnuk z&oR%htzZ}7P*`7b^N`BdhiOs{VxgRqJ@&}+EdKe#Wv9A~!_`AauJi3$wI^7B9_wTNa!AqZ})HV+rB)fCOWVA|5v5OR;p`?J~1#bFnGH9xvXc>07eydWcl;{W3>b2#WahI_U0maYH&K*FJ*P&!d~Izv3$B6*K-a<}f@T*#=Sx85OzF+^0%Yx~m2 zOh5jWF*fk)$6bBBmTB9e{Zal4U)9xwFwC#}-{`=2MRZ@)zn;a-e~+vZNR&QszFz!Q z;uX=l?Vnj2?tNpsvi3j^S3=qA2|H)5bYz&dgKM_M)OlwZo_v3EO)>Iy+vfA~v9s9u z4>ft6)s=U+w(DX>P_75F&bqbsyXs|`u}(q;}JETkg5vDyL%^Wx*Mr;$Z2Wh-Bgw%YB~{n z&*d<`$jx_A*SS*F|9cM0>_eH1$!rSq7bVHwyO&YEYo<@j#$x^m_xi4fQw>cS7#J8l MUHx3vIVCg!0O`0MbpQYW literal 0 HcmV?d00001 diff --git a/public/funiture/빨간 침대-270.png b/public/funiture/빨간 침대-270.png new file mode 100644 index 0000000000000000000000000000000000000000..efcd92c231ffff7770c0ea5c3f4704530d8474f2 GIT binary patch literal 618 zcmeAS@N?(olHy`uVBq!ia0y~yV6bCgV9?}XV_;y&6`GaKz`(#*9OUlAu$R4$aSkpHio5L zuTROsVmIgAw@T-%O1qjXpMRZn#rxf)>X+tMMJCt9&;IiC)j_4VQMLiwzsAqAoqc>m zYkso2%ALrSZu5EOKNdUi;^-OCuot!an0uH~ssuAzLU*uulokjlie6{j!j}~saWu4H zC;RE(h@~$WHnM95MJ!#xU~FBkxn@#1!^X>HYvl?A!cJ;8uphf*q{b+9HjIIR|9iRI z-?!5pr9Qo!o+PC5@Zkdg*+)EbQ&V(><}w%_VrbagT+DFb?1E^!LM1(iNgrO{HfK;XjeQ1zSs(LKxia=0*0MXKohGSQa3sTsje$pge%iLz9Kv>U zrT6yVU(bDx(WBzN!wdoWuWL_hGdR5e!I2=4U?Q1ZUFvJorkbc!)K|=Lw-v{_usM$t;%(P=?tF6ZsouxgPG0>r`}aJ#r^+a?G9;Vvd4<}{ z2XX;Z$}KtilLds{Y>D1-Ix^A8+r~wLVZ*+S{0tU(?=xiQcm{R4bKbYDV_;yaKTuSl z=BX0LlIY~Q$K%kE`Hx&h)SQlX>-bbm&C=arVXgacK8LWJO5!9J$5u}MCWB6~$Qcr` zkG;8r4+P9|-f?|Ra@wWi&pvrEFsz;ZdeXNAJsY;HQQDg(%do-B`u}hC<4g&{{UUOk zOl`mKedxh(>rvq$qjfA3qHI=f=y}T^)cu<4^bIbD$T`swYOfiRj{0(+P7!rjQgQ8& z(K2QZ(f6jWueGH5unK6s>)OIm&hTdL?93fZC+1o#ly=BF+PQ`CN!%O{DTft5ex9B@ z+1x@jgjqtE{|}>Bzh6OKrQCH@y@nG(@itbB4TsnazD@YJ?SI#~gZEza_r8ri(CF9K zeRz9%!#NAvRMGfvCx1(^u57q^zP#kG(Uj+QtGf1t9Vq^vxaIEG)2}W^#%Vihc$_E!^nv)%Say7#xewla@< zzlt+_`1tnujk+Hvmnq3;pW^OPI2nJ=d**AykXB{a$1Kg07KvQYoTILorJ#I5xaY}& zjSaQiZ2d!9PO9@WtoNkmCrk!y$>$mwCtD3`X>EFCH-Q)(-t3=4)bpo`M)b1nb? literal 0 HcmV?d00001 diff --git a/public/funiture/선반-180.png b/public/funiture/선반-180.png new file mode 100644 index 0000000000000000000000000000000000000000..0b1b7ae4860dc75ab569e52ce59c9a8dee782e8b GIT binary patch literal 497 zcmeAS@N?(olHy`uVBq!ia0y~yV9;VoHe=IqB4q7OT|mJs+HJ{4l-yLoqVIY+0A4uyE1} zE7vUZDVjVFy)?Ex?k~1qViO&0T~(AGU$oAFB`^P7^xb^<`T2*Q&q{Z6<4T#8sp^~{ zIyLi}-5uADPlUJjF3F6XVex(Dm3Ee7*GV6uZfp>kqc8O~W{0Xe|cG?x#E)j-z)e2R^Q<~ zMOjw-qN3xWs=!?ww>xfe37y-0-0g9en({P w4HnLA>XW@XyoHv3;Yf8~7AgJs{_gxIE;rH{w{J*fU|?YIboFyt=akR{0CC6FumAu6 literal 0 HcmV?d00001 diff --git a/public/funiture/선반-270.png b/public/funiture/선반-270.png new file mode 100644 index 0000000000000000000000000000000000000000..2f5b746689695ca5cf0dc55f5cf2080d4375303a GIT binary patch literal 509 zcmeAS@N?(olHy`uVBq!ia0y~yV9;V`e}1rqGeeS26eVz6_6^@VN4@%P_%-Cozr{gRE5;gZ3& zeJtYoiz1gCO^sYsdpA!>vs&|Nz-%3-<8I%+KF+1sD=Gu3?w1-Su~=jWh#8ml1;kN3`-Su_X;n`u5=| zH&fzF?GOFqSiPmRvHL+lNvu-$7Udp0E#Bn0u2P>uKP%}8nykDoeXZ6kz+z^2z?6ga z*Na&v-aPxY!n&Dd)!yWM&iUPI)BW5^GG55UPO;k7uXJi=1-q#1WXU}piv-e`IRhkAkQ6pXCoOF3sR zN@f+@cqEhS`s>~q3QFHnUkOc`)KdJbrE7BA#%~|b-<4ne`WELmz9WYj7#J8lUHx3v IIVCg!0PmdKkpKVy literal 0 HcmV?d00001 diff --git a/public/funiture/선반-90.png b/public/funiture/선반-90.png new file mode 100644 index 0000000000000000000000000000000000000000..f8267412b845f78005232e7296c367610a1d2be7 GIT binary patch literal 734 zcmeAS@N?(olHy`uVBq!ia0y~yV9;VANTSHCH!EZANN=-R{e2T3I%3v8?Qe1rB;%-x6ILD16W+|Ned!h8UOX%-j3QMeJkZ z+uyZli*&}Fm&trmblG?}9EmIfCG`SR9I+`G{Y*XZ>r)xYadRtzw=p8)x zljpqrpCjG+-!GY+TEjEd;AhCMTzk7adk!9#|6XigFnP~qGoH(D`^*nbK7O8o!EwD} zuVd=lis#bj)@`30egBi$1*e`ulcN@1-(oqccr)EP-&oA8{j1koxJUUNck&dL;}=72 zY@gn$kR3d&qw7bF*h7J7yvzza8DcL*uWwR5Y{FCWMD26buDfgWTau$#?}u8vFrAWY zsDE>fK1-r<;33x?8+WTtJDqt-2TF(m8Fr;t8>{kKP?z8xk-zGb~Va)w#o~Ulpkfv#+;PIsap-kDBx; zqZL;Bi~@xnpEu>7PKh%mssh(OHKLBxd+pKFJIDga?dnA#z|+c2d!E4K)m$V zf6@cyW*$CodgCPn&xUi&gTe~DWM4fp;TGh literal 0 HcmV?d00001 diff --git a/public/funiture/소파-0.png b/public/funiture/소파-0.png new file mode 100644 index 0000000000000000000000000000000000000000..1d84855712b48c611ecc8d79bd91a5a2ebf1fd07 GIT binary patch literal 865 zcmeAS@N?(olHy`uVBq!ia0y~yU~pn!U@+!jV_;xV*1Ffjz`(#*9OUlAuCoC6NrwJLd+T(WvPPvc}mZ$|%@ zA}k((60v(yF9<1|bY9{7SNNQX=0EG8KWdRpuAhWYTA%vTVq`R1-%93wOsrqgwA|!b zyBO~Mc)wcyPmnt+r)N~>&6ti z$H|3z;-mv7RbAdZ(^M%4;_l>|Z)4-N`R>-ghLh*0ykYBZU(=<}z&DT!QR9V5xA*l+ts;at$mp7~WmBzT)n^Z8*n-@PPug_y)c8;f0N$xG~m#HkN)0~+?j)^_`mC*09 zV9_r9-y8;ax3|bGI=s^T2uFaX>xs0zRx=Ei|K>lo;-GSq%Bl%-RtR-;+`C{mC1EfB ztX*DejfY!%6j>$O-TL&_?EW6%e9X#yiGWeb`j}!4qs;doGy@&yzh5SF>56FWuV20H zN8derRrF}CdrOGHGQ%JzfuBB|Qv+MpCQRq@vO6oG=o=e3S!*%J*Y15zL2F%NTOaIt zU9_-&X^rGMZ|~U2tL|*x_l|KwJHr!^+WrL2V+UVXuDMoI#c`gq=$YcKs$E4UCMNoN zR$L-Zl2sln8qQX^J`uLNIxnbeLIC6Xx5@QuYUL9bizsenx;Jmn@A^mYzCGAgF85ID zh|3BALq@iy`cJ2CI#+1?`(2QqD^kh9aM7M=cFP1M)sT)^{d4BmFX`^iPG+uUW!QK& zW!H!5s%>Y?+FQ679_@amkYW~JGW)Am)rlJ&q70LA^{32pW@u}j!Z4v`e(D+l+4XOe zH!zq^WIE}}z^Ujwc?s`ih6%nb9v7Y4HgGcBbZxkCO^TNKh5sV8g1RK=TcD)W_a@eR;@@MDnx6{vGlJ@KVak-;c=Kr6c a?8hhf-U=_YY+_(wVDNPHb6Mw<&;$T~(Q^m@ literal 0 HcmV?d00001 diff --git a/public/funiture/소파-180.png b/public/funiture/소파-180.png new file mode 100644 index 0000000000000000000000000000000000000000..962f4a5d70a27f906e746ff195576e9ef775507e GIT binary patch literal 670 zcmeAS@N?(olHy`uVBq!ia0y~yU~pn!V9@4ZV_;x7vp%khfq{XsILO_JVcj{ImkbO{ z5uPrNAsLNNXW9B6a*#MaU#*Tcoz2{AUu&{^mV}g$eS@+5VP7$}<~}_&9}7X@UPZke zp5D&RO;Xo)eaP>7J+=Dn*6?~xPtAZ?@$;rXwp7}r;^$`BC;u)_`Sxqmqn$6=6(3Yp z9iDg2dD=qPIX#~&B%jLL??1#Yt*E$AMo?5R;KPqEuRd)1qbz!{l+j_v`I?Gul@1o2 zXO|PW(=?S_1Px~26&4Jf#b+(dXw%BUArbGJapAq}9!=kNm!1ii@6CLEd(HfgZ$bi$ zuYJRW4i@{INU~GqD)1G2>6P$ulE7nDQO}@fe;x_7Te2z~@nU(=B%rS3aKeeth3A*; zTPsB+7saLP9NAoh-8fvg{wUg4-SA(@B|`azNTZ0j)2%s1my$RcV}+EY)HKU`*Ku@C z4m=k#+rZ~i-u#7Jjv@s@A8gFy+*_2Ecro;UZCbU~DTKA5`J3k%nL{PI4}&-^WbWR@ zWZABs> z+xB^Mr_OHKvv!)xYSoFY4N6FG-!Zd}EXu&3{XW{d6gWzLD;8Fn!>d~I6wath-zriRUdv9V4mH@F!5(x*LfqmI76mBYL-`xL3?-xvIvrL!@Yp$EgXuOxfa$uX-jVuQ=zlx07LC%L~5dz1<9@ zoQ8AT%+;872qo>7y|9BLLF>rXI*)7@hO3MdU-K@!*2%C&z=i#{@tv=A?%HMvsXu;{ bzn7oAlEHn?4$giC1_lOCS3j3^P6%jdlDfX@!=%@R?(f&Rzwc95eCXBi?cv{j+3R^G7(~Whsj-{y%NA>w{UWuWX~I+2 z+UR?ov$HA$CW%DGU6J2kf69HD_|_RB!IOMj_!L#cI4vy%kA!(_`nu$WVAQ%}(|b31 zojRz-#4v3&SH?2t@Wau>s*w}R`qWma-3tUY@v#A6lHiGtdMwcRpSiYvJyd`=&`QT1y| z>kAgW@X#wvPg3&PcGumEEs*r7i=W*Q!7}04F&+I^-LIt&7@SkuBrvz*2FrxCmmZwE zeZ`!GQN(HCw(!PUZiVR109P44&dBxLQt|;Bj7zpg?ovtFxyp?FN?F4~R)NQnheJ*j zg+BcJy4v{J(LNs?rjD;)Ufy!{$YJXEoVsJ}gb3CN=Uxk1DJE4aBrz^gY+8Q1z+&U1 z)*ngtnNEZ$wdlW5Vd)CFabY^cBHi9~PBAZ|88Y7r)^c*HHb|JCuI1#^ZHPE8wXfxf zQiFy6{B=%A!VXsR-DhxhhBACCYjzi7dU#$UU*G>CmqPXJowfH3KAp91TOqrgUusbZ Q0|Nttr>mdKI;Vst0MPsw8vpJP)H(3 z^Mq^I(y*zaNofTtL677gPUe|>zjadGv#g$8YlKThj=pTE9( z=driXrB?6?eJK6aYd_c5%j~h44wF=juioTSFML{7H@vs6d*3IYx9ns}inyRs!(=Zv zGr^5a7Mdw4;tMq!7V9d{>J!pYvni{aAu=*~g^T6|ODbEIQ$$ z=ls~Sg!=mV%8S;kO?POS@S>w2mWkoRk1sv@_t!m2C=jyFVK%D^XkqF8Ab3FeK|(>3 z?^Zu0W-mP~78P&}t(!ctIlqM?04nBXlYi=8P496Lf?ycnf&R+;wo^X;`y z7rrFm$YfXhFKG2|wOv9C4C3PQ3}KUMA3D9uUteu1c=%$)Y2^cE9-K@`3*FxTdCbDF z%~~*sDbC7KZ?OxbiF?PnQu))Nt;d%?zg4{Uw73U;vd(|;R^?}ln zZ;Ri#>`6I)?9++XG(L{b2~jR3s>#7?uTD~E=iYd7f%ngI)7V@YM6?@u=LJ~S*embm zxGdD+S(JNWr>6c5tD8|jL*}z4$Man{@k>Z^L9d+)|HhcmgLh|j-buX>&Tw&h@04rn zC-36%a$*&@CZnkS*z29q3#|tAbYZ`_s>jV1eB0WP$yamo7uN!oOyNuAZ)J0wg18LM zDuy&Xd6*Ve{U+9K>4fk3@xSLOaR^=5_A^^J;P<2Mot4RLitZS7npB%;EGy1 zmqOI!)Q$-^->fscSZlPai=nglYJsSd>V;gppZ^3H_po0Oa;TVo{(`FW5tjq=kIF=x zX=JI_al&+{Md=&bz)${Oyyt^aGP*!@Mq0r_?7F z|15=%drSy-n_j)|iQXwgfg5l8ZB^GzZfZ^9>UvPKH?Zcxfd_WC8SjagaJn8?Z6tAg zb&-nxl%A;8nJ3!kO=hlDXHDL?N%O<1BU;^@2mXF!X|QopZC>sDTtHL8E@PHNGub1D=h=sXT@lSS>2Yaho}orB!byU+UGcJq$4n^_i=^GJi5KFfe$!`njxgN@xNA Dbia}2 literal 0 HcmV?d00001 diff --git a/public/funiture/쓰레기통열림.png b/public/funiture/쓰레기통열림.png new file mode 100644 index 0000000000000000000000000000000000000000..a9613b0c888ae55dafc5d8d487bda1788c0a86cf GIT binary patch literal 595 zcmeAS@N?(olHy`uVBq!ia0y~yV322EU{K;=$vdM7d^$aPd2B~J9odD|)zv5S8Cf_g=BOMK z^pNlnE|}if(sDxWWlBon+UCDstM+Ce3~;L9mQ+y0tl5+u1&LP;&~X^^78 z;pd-EY@PEi<+E$$${q`^bHW#9^sq2&`k9o#yn3BzALD~xUoLHZDPCUvn^EXmQCTnN z)1ZUjYmD9}WtBeJCNC>@AS2XpX8F?4%@aaT+AXg+nGz+j`p{htwFh(J?=mpN#qB=v zth<7VVfEwL2dob#8~vY|y=9f$%B$-*`(qx=Ib7P$wCs{`Kp&#S-f-Ce%#bo$}2bN_1I|9rTaSK-XZqlX{; zc$BDUyUt|h6$g#mS>+5256-`z&%jVnyHB}{$8(Rrm-sbLQ-X>3hS{9~bXkzjSW;@7ULkzqX%O_3vnQlv830xOpe7@}OPg#TQ3* z%-wa&*Y^Tzp75HtueN=ffA5d@vL_1{Db3ibM~-Lo|>x{8@GIwQqF{|rmeBD{0Y;<-!NRcIqi@+!)wW;>{_nRL5JNNtLu?mAm{`bF9UM^SRUDn>aZ)tzd{t8vY9#NT0ozkLZ*Hsy! zGyl$O*>h~;pIYW0UmsgL92Q-$h+BE<*<4xX8BbX?dp69DS~dMZMoE%tk45?CD@+Hv zHXZ$aKjIC;jzb+cZg(zYE)aD)a^Jg^??AW&=QpV<- zfHp&x?4=*y)qPn5wtwjQ_B3z>Lr(ati~B7nb2aSV(x=zAgYCgD9Yx8)BW4Wu+tp8Y oDu*x#`FCGydiU<2l8f>m_MJ-W>$j&){=)#u60UwO>zopr06t8Ju>b%7 literal 0 HcmV?d00001 diff --git a/public/funiture/어항-180.png b/public/funiture/어항-180.png new file mode 100644 index 0000000000000000000000000000000000000000..a4419534795f73143a39c05fc73b4db3f72deab6 GIT binary patch literal 842 zcmeAS@N?(olHy`uVBq!ia0y~yV6bCgU@+idV_;zLJbluHfq{XsILO_JVcj{ImkbQd zES@foAsLNVqxO5tI7-x3b8K6->-5bNp_+OTN3>>WwU|tL^^fWGfzAbUr-qsdh^%3L z8Qkg16vn2#zKDDEQ8(L@@d_+@tu@n2%hH}-H#eRgez*VT%*yxGpU;}_<~B%9{-3sO zW4-a?chjXM!`)rB-G0r?@NW5bhK9*|Q@0sfJhauExS?Yk*8>|#*+juy;R97d+ge<= zxH3FGSj*Y%q1#XvkatKah;xCAj!B~6M%ER)LbEq?L@=eSnBeMkNXd!&!b1MLar0Zh zT>U5!emwboU7h{!mb~@yYlLDRyz)@-z8_y>vE|+BiXYd-S({H3TOOFbLvPnMrV!8Y zgSrQ5dT-ylbM>4Wlfci1i*~Ke=i8umZev}dLPKB8M}uPpA1_2U?7SL2ec!{Y1p(O~ zzFwDZm}sytlXJxzz2?_KFGBYFbZxqpQ2du?_UrUx!W&&L>s?4G^_aBatX_b3-sDA7 z-0Vy`{>=aW?D~lo!%_$LZ;N$4RoWTNpU5s&_u}>p9oD(bOO9L=`ec?J%Nocaq$s^+ zjcs7^>(9s4#ZTqz-~Ib;wUh6PTYpdAcHgLZQb=RslMBwKHzKkxjzxm2MZv$3) ztJeA5XEYNO7d*}AYoMrqd)mQ5o!*BGk|paLm@^q(Ot~%|Sy}tAc1M0QbB@9GDrpvu zy`fNNQM^&(vYW+J2D>M#mxP9{*tj*A zaNd1}$kLCNhb?C=J;P{pLoMXJ&b%mw>#{9xKlVc4adEn%x3^)5?4Q$bxsLQ E0CRVH+yDRo literal 0 HcmV?d00001 diff --git a/public/funiture/어항-270.png b/public/funiture/어항-270.png new file mode 100644 index 0000000000000000000000000000000000000000..2985ca21ed559d40f0fd2f9fe9d136f9dbddea88 GIT binary patch literal 819 zcmeAS@N?(olHy`uVBq!ia0y~yV6bCgU@+idV_;zLJbluHfq{XsILO_JVcj{ImkbO{ zZ#`WcLoynl&fK3bY$(xoe}UJTxlyNtQj;{eU3fHnVzncbHX4?=ajkNhIm1eD371OR zza~G??B$F63{0JucP-t2B>sXX&)MqIIh+69{P(Vi>-?luJ3s%d+<)F~HLKLQXYYPi z6o0Q-W1Ht)?Vzi%d($p9h8_EMF);l3@gpGhT(9u<*4!;j89fyU=1bp2M}u3pns1*gTUY-3=Zn-I z6OxtU9#1lTbNJ4kq*c1PKQA{k`td(`$i{DAshjI`b5pY?SGlPE@vDs2!^QtykIZZJ z&B^3#bFME~$TuVMag?Z9YVO?Vw-Orpn~)MAJ0<@$`(n_4$*HD zb>u#uGvQF;Pf&o>q)$P@<<3lS@Yq?&Qr}rE4^l%>6ko)A#Q&q6GO$WdozFSeRj~f%X@~!(M}Tvuh};k zCu~x9C8Xw9_=qdP;?3jlFV0lPd+f_gRI)oz(8SZ=?mvIa``?wElV8}I-SfQ>pD7-H zufBWV@}7`HrMyz{_jdb5W3P)OPSW*@VKnibA<~@5ejy~$$aqBJUR?Oj@;8KZ33#jR zOUcYF9sUeoM4T>HvGDFYzrpX8=ud?sYI0SVA03OH6MSRKt-tS1ti0Fry; z@`}BDS&&d#yWe`#KKCQL9>s{xv*F2j{qy9hNBn$s!h(U*zV;kH_;I~M6zr5A}$B*cUnDS(*&b`6{i2J z^r+P0WO&q?K4~LeCYI3;rA)|YbwzYG7{8@L0GrV-_ha}l`%)fJ@6wS@& zen{fo#ymSDBHYuXIP7+aghco4En8Mjc$E=VYBYJHC|gva^utZxras;G*Kqo(L!lBH zM{DoZoOs~+_&NL6^PAT!U$bkyfySO`e(lWZnOiERnzZC<*H@PwRGNGKSZ|G4oLppV zs(pQB@Q*h|lcvY*-g{N;Qb=^$>O((s_WU}2tZen>PxDVqUw>aS-%T|%NzGwj*J)3` zX3CP!BC={VI^1dp#?FFKZLv_G}zZ` zH(WU6VC}hvA&Hau@ku9EfoO>c|5Kt4v4;*+7F}m}CB}BI+kjU=H1WVTiBN`>oa~G5 gzB&_Z$sO{MKVxUBuy*67e+;0k;OghH&MBb@0ID^DDF6Tf literal 0 HcmV?d00001 diff --git a/public/funiture/음료 냉장고-0.png b/public/funiture/음료 냉장고-0.png new file mode 100644 index 0000000000000000000000000000000000000000..1e338da2d7536f1ec403b2a31e6490c1065441f8 GIT binary patch literal 722 zcmeAS@N?(olHy`uVBq!ia0y~yV9;V+dQ z{pdwVi8f>5C7yqd;_T5fXC6&5+*UYoQLGN{!UU@s-_KN+zke6|>E2!5zj_Zp{d;ow z{kzz{@`gt$k4}~;&C6Lm&wNRilHj_3dsjU%|25BLTh-sDYPmbFU%nN6Q#E1L>+`x1 zyEgZ+GKnV~_uJJ_Gv~k|xAhG*E(w>X*D?P5kWeKcq9D)2$0~Z_dE0%4n}6C@@iDJG zlk#`6#gUMUr+myNBs^SsUc4y6Qmbn9Mo#A5-rkv3Yh*;38O=hkaCQ5&dUJn{o1t^q zL0Ve6fme*di~IAwhU$H`Pq{76=)PNZ^~Mnv)lgq)&6S+b#L8_MjW4WycGZ~cpdDxb zu32x2Kf5gLw=X>8(x`*nXA8TRa`mu4`qyy9e2nyX5;Fj&`n_kt2Yj?Qoy)0ZE z_n9@PY0@gD19zWTTsX*d;CD}B`$qOHdjqwr7mI{m;kqp=_nI}L;??!*X1e|E@p1ZV z&bSE9#(Z#6sQ)Uh z-#QDlwn+>8bmE)rtUJfnl!1Z$s`IUHHkLgv7PFkwU)Q!*s%{yphq=NJHbINrB?a0w zlfy#HLv}1xX1;eX@~Goif#tpP85&;R6k>SrXVF?7ty?P61yUDy>wZ6zy|B`Nkbt8q4bt8q4kN?Q;lwB^Q9!|%D5|INB7x#<1L%Fp*cAD%sP`x`!mh}N3YxD(;e7kysl zqWb6{ue^TiANMyZj;qDREs6@RJniL@vGTa`kDFWOM&vO@M~;Me^~i>hx&wDkE@4<% zaX@admV*}89*GxB9!DF3cQFO6UBSk&sy-m_)*<5s#xD|+FPr*lD?jXDGRkDW_3p}t zlCSSJ&QFxRz_{h^O4d)oY_~SNDmb?Iz`xFBvo%#qb{uh7o5nqP`tB1SFFCGF^Y)O- z{r%#@VcW2}S1UCXCYvodZCi5o&W~SL<8Mr9zNGe__vN%rw!7{)pSEOwI_LB1`bVNm zeedy4(A?Oi_x-|}iH_G!v~*363%vE@Fq4sLP~hf}#>iDiPASTo=qXGt^I!Jyff$3q z-ui-@Q@>xFU$UqC!N#RGx%aL5{`>Vsty7ll=E=-=@9j*V_i^b;N7fJDF18+bvwvAJ zEza!2>o2^K%FQ=m}^Q zc<=7b=g+uT?XSM+u=MX&-l=c64IfS_J^F+5^o;d8csLKvVPIfj@O1TaS?83{1OSF7PL zE#Fw1ShjH7=;)1D)2rSy`R2}fH&0(zX*>Jo|65DzcYb0WK9@4nJ(tftDz#rQJAun~ zZX7eir7s)|AAWo|vdh1W(Q*gRc8=8!mon2U52o&Lxxo^1sCxp3P3o+3)hTXM{4Ou% z=~L1X{b2j6a>thNm!biRXJU?Zv4l7LezE#O=#ojI6E21>5o2ocO3_U@pmfVUZQG2; zNj6dcWK{x8HXp6|`7g=F=~8C;RzZQo-4)zZF4`$I|1w8DYai*vjQ0< zv*fQhI$XE=Ah;sv_X0jqgTPG2(BB<@`QsaB@BV!tqb4H$%t`atDup**yK$yjRdPQ5 z+mJa`aaxD(Z-;Qk;DV;6wTGb!?mU9{oD7t@$7#S(`>nqx~MC$n+LvH)sppW6R%%L zQsmPO*Gp$vxq69z;PsoLCLlFOBc?&yB5(#nc|j8IrS&Rz&WIIH`_TL^;AbUs{dLFN z_R$OtC*P`6q_enxIQ_Vo;lS}<%j+ut{(URUP*7CBWYE#lw*0}A?Bw#`op(=J9#9k# zisQ?BG@l`|Zhu{6_m8%4R`JhIE{d2hlUwZlMnJIdL6My3t?Hz}mW;Ps7zopr0LbGv A7ytkO literal 0 HcmV?d00001 diff --git a/public/funiture/의자-180.png b/public/funiture/의자-180.png new file mode 100644 index 0000000000000000000000000000000000000000..ab21c1d3582bd68c6c52087782cedb45b7371a4d GIT binary patch literal 686 zcmeAS@N?(olHy`uVBq!ia0y~yU@&B0V9@4ZV_;yocroE20|NtNage(c!@6@aFBuq^ zGCW-zLoyn#&fM>HI6$PmUT|sm4h~t7t{+Tuqpfy!Ta~8p zev0R687DT$a_K!%;wwF=xqbWhdcR9Q92K`*{AYLGR{f)zliTwpdlx)TndA1u-Q@(! zqlz6hn{U5eJ2xVAWA4@2iv%vd{U)|zMNg0uYiDSn+N9}|w6{E2rSLe0bEa0P+szw_ zIh%|QPMu&F>LzplQ@YFsPk~K5BA5HBIXCI5%la=CXE<>5=F3~@G2R7BpWIQ(|NQb( z#V4!4t_H`pT1&x24ZV9NubbfYg2m^mz{j;`#AH<-n*`l8&TX=gQ|fDfF=vbTr!=81prj>Rlfxt%soS4`&8f8MxqV`+y`%i8pq>O-n~x*qsy z%S+C7$*55JZnmhq$4@E0qA54|x=QiiitR;u;T27_()U!H3tH8=s;4cOB>0fSU*w;I y%e03){v!KsFXTG?cf!;7{F_tyUOy|~sNcSSWrRfdrE3ff3=E#GelF{r5}E+089jdh literal 0 HcmV?d00001 diff --git a/public/funiture/의자-270.png b/public/funiture/의자-270.png new file mode 100644 index 0000000000000000000000000000000000000000..96ca92eb42e15816a14a62a40082425a2a4128cd GIT binary patch literal 630 zcmeAS@N?(olHy`uVBq!ia0y~yU@&B0V9@4ZV_;yocroE20|NtNage(c!@6@aFBuq^ z3_M*NLoyog&e-e6Ik}xT-(l^-P3j&STaVnD@qyt3iFCke0PJft_ztwEzG4Hc5`3eQ{CvA@{f?Q>H$c zB+uuT$QE6<=t8o+bv~DPEVtKq{zFXmG;d_F+c3aOpcVYiNr}eil#vOKzIZ~ih1gr);K#}(5`%6 z4?~BbYtC$e&kPKvdOsJ1InHBeuy8oqcCD4UuUlj**Ga9we|N19nH)%$n-toVGIc@e zwV-`*EAz{YN}g|i!nwX9;P#1-c`L4X-8dzDPS9-i1atm%pIVAt*55vuV&&Z*`(dj3 zo^8S>Zy(!nYW2Mr3<{6_>{!?(xP8+3x$=B&4PWNY?fCF_=gTLbB^V6qq^w{3Z%Imt zdGbF09RtJrcKK5b9fG^RiZNWU$Yt;`{7^Aj`RCc!YzzVUa;a{AW^r1*{PsyKp~uj5 zn)yR_m%WuN3^&$pZ#}-^iL1P9X3LHklQ*tMUOY*iud~JeW`|+R+cPO=TRQh>y8VA6 ztn6NJN;ph?=aB#xj>FVdQ&MBb@0N&mtNdN!< literal 0 HcmV?d00001 diff --git a/public/funiture/의자-90.png b/public/funiture/의자-90.png new file mode 100644 index 0000000000000000000000000000000000000000..41b8d57b7366fa20aa80ec87575fe97a4bae1e5f GIT binary patch literal 760 zcmeAS@N?(olHy`uVBq!ia0y~yU@%}{U@+rgV_;xtjFy_kz`(#*9OUlAuM zZw2q`-dh*Ke!H~ocAWICte=75>@zin2W!gD{fmCUqtMlTgDdGy#FQN#n|Gd+QVMha zw{fl3yLMw2zvl^e?}_c)v%l}_UV|xB2iq!kUrk);l)-xG#$%;Rat4CeCq7$oD1tSn zvv|_sDLhjZHhpow6K6j0zV(gPmu1S~`B&O@ee(RaqvM*@1hqn?=IfRMp{%n%siiMo zbI5Szn@T6mhFl-DVzKqnF}L3NNv~Yd!0E-P)jFwk;*P^F{;zbnVp9;t9e>Z*+GR?ZnQfBa=cwrUmYX4Mr+z71m!;CQr$De%#edk6JC2&rsQ z@?-jOynMk3{#yvD6XbZKeDS*G zh}(XobF4km7~T1Ee=$SD;m6L?CekaoV8j!dht;F@<#&iCT2l{>BHX65W-_`$!X Xewx_Dq^N!d1_lOCS3j3^P6)iNP$4bhXfAK-IfCR$7GG3TbE?-ce8V_{$9N$ zL!;!S&@K_H5(5s&s1%)oI}5bVrf%??=C6KtZVB((%@LFQ-+$g+zdl}mfoF?=ll{xB zJyKR@iw{ckCjOC?WeC}RS}||Bb7pZa!bH7EV`Yj?u~Eu2S; z&G@XN^$umo{2FdYAVJ#&Fk@;6KVCr=;8XYMZlq0Exu!=_xcr=FK#!|cM9g%g$R zUH%_qVAx}R?eyXLy7t5R))mjrf4s7(ps@6)>_S_Hf~s7G2J=`(1{u}grW@D~{H$vh z4}A2wQry0Yfr0Dn!FNo{ueV*!K0JF}kc6z(ZPPok6Qn0T*|+K#d-t8Br2)|lH{&i} zyuf-$@7l(#4bn4yx*VD1l$f>W-{LQ`&i%hsIf+>^diLC9CagxvlbpU>_rB>d&wcX* z?${ZeuNz!83%G3$&eCBGV0TH0;dtO1-rDUeb|lZU@;T$1ursCstP|hX@->{BJ(neb zRWnmdn}NjTg+c_Oh>6IQi|=i?W0g>kZL{Z^G8tx;oqOukiKFZD?m%IfMO& zLKMT5PY29AavNS%HmsBk{p|3hz2LbTgYa|pCl5b2SeqM%zU>HMTse!KE88?`Z{|-p6B!itooVI7q^{Hl-x(Mf O7(8A5T-G@yGywo@@-%n= literal 0 HcmV?d00001 diff --git a/public/funiture/작은 선반-180.png b/public/funiture/작은 선반-180.png new file mode 100644 index 0000000000000000000000000000000000000000..b63b3ae875ff46b12a3099d682b42c4c77a62e9e GIT binary patch literal 558 zcmeAS@N?(olHy`uVBq!ia0y~yU{GLSV9@7aV_;xt(mA2Xz`(#*9OUlAuN%_v*TVy}YcPiTX{q)}Q_xHFJ6wSn9PoHr#N?}Y> zGvZmf^IA$=6sPGeU9qyGmwHw^Y3y{k_Wn}VmgqGX^K|P@9%k6}+~;Z2r_XEiexJVI zwzBEPpH;^g9(+oaWhl7#R*QY%1(xeyt$u&7v5|Y@ch{bqCv^f-enYn9n(`w7UmBw7 z85nNpPgg%58m=gKV5-+Rn9M$wT z_{v{By!J?=y?Us~`|9BDapuga0*ANCxW(VC{>|2~Q-MKX5C2Z#@;yQ>4$GP*@O*YK z)3T0fNNbI;tanW+Z`A1M_?N6@cjNi9MjgkT%f~NYH?tRf$+po~o?%1yA66Hmg<2fF zsuL4~v>HqlzUX8bXlXX6OxRG-ww1xf@sQ9-(TLV274{R1MGZ0w7#JMuJI*D9988I2 zJp;tpZUwG;}>jhU*vp&okR7- z14n_@Lmp?idS~&yTeEw!b^h+nR}7ZQ9XX zVKvRUlYI{_UFck2QYLl!gZ9C@LWNfw0~qRUg>q7awgyeTFx{&@%2mUAZHVeuBgegK z>;i5v{roMh7n3SKn>ChEu4V75pWoj6xOzDEL3o7cgGE7wRrbfH3!G_Fce>3juOm`3 zb6)8s>p#cN#d5LlP0xAy`GuIV*1vfsvy7kodnK_p&`*cq*(=5eg$4`^KKop72Z;~QE-l~OuWhjY!S{#*eGIG{k3JOfx88BtvtEPM-dB8Qf;&T*V?*%O zyGd-V-`F4Q`oDg+_QZp7jfdjIUi7?;jlA!<<(B&CX9wgM-4B)Szwwu0!o4`|H!dap zQ(2oD)(E_hkT3{$P&v})C$eEvL#BfCV*BHr4oVX^RG1P!tu|I-*de!unZeI2t}eWx zY3|FNw*Na~53p}@-kvP{pz)@JcmV5fmKRNq>4}o8Zv-<;bio{cZh{SO)FfcH9y85}Sb4q9e E0Ohvl^#A|> literal 0 HcmV?d00001 diff --git a/public/funiture/작은 선반-90.png b/public/funiture/작은 선반-90.png new file mode 100644 index 0000000000000000000000000000000000000000..5ecdfb28d78b2eae9d536243d25b0da5dbf0da3d GIT binary patch literal 601 zcmeAS@N?(olHy`uVBq!ia0y~yU{GLSV9@7aV_;xt(mA2Xz`(#*9OUlAut$2X}!7K;NtX)+Y8bz7|gH`ZZ<3| zP!RAjk?3u3Q+#wlcgm%2-@a{2>iJ*t()R85`QHjI#T;ll)^}pFj#&cpIaXGtm}^~` z%q%9aL=9ev#yswoW>Aj~{PttA`-bwOCtO>X9s0O%%cIIoLCoI90{eGHtYegA_0_MK zb>9DV!v45&T_@#GuLbE34Xt*^-`F=R=Z)WUPKJUDSvTJ^mpo(maN+H)Ly3<#PR(4z zTsL{2{rKI-``}IX%QWb9p={Si#|POTeps>VHTslnB<3M4wD&S2H*W{e*4fRicRwmOJ$Uv+DkrLlj`rlZTb)r9<#)<1vy z?10CyQ*05+HzVXbFI(7Vbt4Jr&I>EViz43jB}R3ucQ8v`tXr z6kK5-bE222u|zP-smrA6NTKGVdSi3*-R0Gjnz{cge0cZvY@M~S_3q~#QYTav%hWI5 zTzTb4+p@6B;?d!KV9XW1EuUYU zm~^k7bLaDzM-Mj{GACYeqL725C;jCn0lqKct^1cY zdMFgBY%ufl_OtO%|E%FXUG=?U$i3zw=E=YSrOz86a zU#phs38*wGe9hrnyDI3$uOG9S4_bfQmVKf7Z7xt2IlW z?0(}RaJ|K7`zo6kdtx&AE7sI1gbM%Kv*6_J*%}{qd)y9GoUf}q8&2PSWwV4{JD5ZXhOiI0N7P5;41i=W*V;_1H0K z`&a%`bI#wdpLsWLt|b4YKNmli-~Q*JzSQvBPlc1S8Lo0oW>GBD+xuf{*uov+{9Mj1 zTPh2pGVE)A_sy&Qm2f*(`114T`d2rWhTfj~*m2VQxiYuQ-aj{2e{=ood$&sADF@Q| z&Ht+{3I4vhbn|7UFAGA{?Wep8nY**SP*dabv1XO}uQ%fD^wuvvCTj6RRm7OHwDRxu lkl+b!20~o7*qMGY_r_>~qP+kB literal 0 HcmV?d00001 diff --git a/public/funiture/주황 침대-0.png b/public/funiture/주황 침대-0.png new file mode 100644 index 0000000000000000000000000000000000000000..94dd63ac8c2f4d1f94856fe219fcda90aa995f39 GIT binary patch literal 700 zcmeAS@N?(olHy`uVBq!ia0y~yV6bCgU@+ofV_;xlVa~8;U|?V@4sv&5Sa(k5B?ALf znWu|mNJit+S%%rS9VFWBi#W1fme|DdNtsKpwU@c)5e^V@>OwjOYYC*OIULI z_3=4xZ$1$%Z(g+LyrYXu?}P_mQk<6W5moCsQryDGApebzks;pCPBM0muU4lx=l@@y z#Tf*)&x_DIrxx`{kwe()ks_z?`L1>ipC?`IIzBFUJekD#NrRkFN<^9baxyZqqkANX#KI{JqS4CWj4-E+?Im(Wa^36lhE*SOF0xs8hlSfZg#P%QyJ*+1dY$z3S6_2E zgwNpGblXT;UAGW^-I zlU<^P^V{9iF*fRHTD1_lNOPgg&e IbxsLQ0E{gu#Q*>R literal 0 HcmV?d00001 diff --git a/public/funiture/주황 침대-180.png b/public/funiture/주황 침대-180.png new file mode 100644 index 0000000000000000000000000000000000000000..90c37a3b986e104852e572dddc9cff51a49a5175 GIT binary patch literal 618 zcmeAS@N?(olHy`uVBq!ia0y~yV6bCgV9?}XV_;y&6`GaKz`(#*9OUlAuHbpgVPKe6Avnh z3$bK1r8Mm~Fm7#-4>J?XK>i? zP50UyQT21Dg|{phy&`?q!F@(S)E?Wl472WU=;{9{d%0Cw#!zA^1H<3MqQpbXvlkoB z(=Fh0IMjal`iUx`M5jM1-`}~%$Y8ZxouQebIgoSr?f6HgJe_{l={r_Gg#WS~%tFjn_y#&sa8BxWSR(az}p5q}HU` zrA!(82CKysK0eu|#TeATW*z$po7KCe4%~3|ifK6bQI4TQvxocG{BvSVckG#Xn4f%$ zIA!bb?)>99OfBk{4w)(CuqizJFd^&*pU*_bkV7q7*Dn9hl#)2pAhGtmuAYNbNek!e zM@O6*HhaIl@2ljqK~Vh=qt?Q^!B;m|NF_GS-N6^x!ny6y!?S|7%*_?whYUUMz zbsGXzS`#E&L=;;S4mi{`DLTz^IKzKKYS@cxl6*X${*4}5KwZ147=L_wEdTTIA_leC2#H%uLO36AReXPN=k(z$1HTB3J9B%v6Si*Wo5&gv z8liD_S|9g=!;@7R=Gp!WexE72LG<5`-+Cc;`}?^P-d@&Z;aafn!_~u*etmpGtDRbM z8QRmoUpc%&d(WRT_J)7o*siQS(8IN0Yvq|gcfKev_{OyQ&hhe3WB9atYo(7_>Dlk% z+In}J*%KX?KAXm`Fniav7eTom%xm`5)V}`pqN_LR(6OxIfQ?f>U+kzBlB?9)vBUqN zQB!BTkeHM>zpjpnnq2pW2eEg;e!PBqR$2G`FF~;;|GXv+`&)O}`wux4d|cMrI_1tk ztMGykej162x={~*@F;BAU|@2k*gTwHK`e3M2m5uB4mpRMmd+Nxa+h24_S~aNIw7;J z#=1G=9BR7y`ixn_zi)0Ohn&`a-*Mh^gXSDDgEWRunp)Q$zU?hrKKrDLg!O+$*OpFO URVP121_lNOPgg&ebxsLQ0FJ#QNB{r; literal 0 HcmV?d00001 diff --git a/public/funiture/주황 침대-90.png b/public/funiture/주황 침대-90.png new file mode 100644 index 0000000000000000000000000000000000000000..026dff095e90a885fd365c4cc24019f7f73566de GIT binary patch literal 697 zcmeAS@N?(olHy`uVBq!ia0y~yV6bCgU@+ofV_;xlVa~8;U|?V@4sv&5Sa(k5B?ALf zv8Rh;NJit+S%%rS9VFV~MROP4&CaNETG+-X>(u6O;>Fb~-fX*1MBZK*%+Bw(M{Q}w zi%An!PS}|8_L>9t&D~2>lG)mM8V{7Nh*zAu_Qa)H^|@2hC;2^k@_cGa?JnT}VXM3I zCcSyznUX%~i0jg&j0dK_3lQRJpU;0|3B!XYKQ0)*y`A~d(ZFwwH`{|PKVDDwXJkl! zZr)ki$uLJu-Hd5PtHnf~1!0d|lp3PCgeNm(>H2+QyYTW`i1HE7D2C>QGf!6tWKFTS z$o$}wf`s#0A3;AigLMr{B-iD;q%SQk?=HXZ-}~FfdVgcoOt;q$Q=XiYT>hc`+kKbc z)7Sbk2yiO+J$;mU=*ipJ*$12$rgo-tzV=`b*i{jiD7%uuOW0iWnj!CjT|2gH@Vm&c zrt`MgwUg2fJ1TA-vO3MCpcc1v!?|0pYz?>_g(y&kMcIUj2PX?1uQn z!t1S@Pw2*#CvMtO5!~Xrtm1Nu=cYj^)oH{W++_M=q>9~mF4`YJO&O*ltprvc}J zj*`ejDevT-H};opYh+@4GF2~n#*%+KXR=Lj4LzhH^q&22hMi^LJ5Kh1tp*>rHtT7< z7hz#4aGjx38*pup&X4-#EDP>GUdK6kDff&$;SH+~E&0&zv74!5^`RvNCs)NYKFm4x z==pr_1Br=Af4+WlPFm;X{Au&sI)k2RkNXe1J1)N+Y_?B#`$2ntjsy33IWliDFfcH9 My85}Sb4q9e0DDzL*#H0l literal 0 HcmV?d00001 diff --git a/public/funiture/책장-0.png b/public/funiture/책장-0.png new file mode 100644 index 0000000000000000000000000000000000000000..6f318e4fbdc2efa7b8484afd02795f912032e39b GIT binary patch literal 1040 zcmeAS@N?(olHy`uVBq!ia0y~yU@&7~U~uAKV_;yA`KAhzU@Q)DcVbv~PUa;81M?|Q z7srr{#=E!eeS`yL*gw2i-J8Xv=%A#gHIdOnHo>6K(M&~+=NM;ckpj;;of$7&Os2TR zN_euX^9VO98gfl8QQ~t@3UrpzW=`1Pn7u)D<>A-WTi(B`dVg>ivUWWBTJ5N=xJ&V94{wn0&)nhA};qK+8nspqz z)+jqN->mIvn#Fn|!A9fVfnBE-Ye(iuEm*qbmDjXJwHJ=ZqYU3UTvxJK=dkcq-KGQv zi=%Evfhd4NHcr3rUOMd&a6NlO}6%ILY=WI$ySh%<8WK&~riPX$Bot#r9 zo}9(d(5Yx-V%%YNVcT(yF15*~hK3=>y0`D2c(RO%p-xtI;`!GsZT>7$q6-XXNv-SQ z4V!RY^x{;V%@5r_zc}Z;&Bw529iPsIr`xWl%wEu7QnOL_Pez0P{U0)3^R0DX_sdTz z{n^l1!(Y|*wf8({t~i^)eC?zKyf>`!roK01@QAbC^mgklmO}X@zZV^En!iwERzAPp zqVmFc?hAY_k0rmAW=2(5+;U~zAlR{tuPnfbagLYyE$@^DB?YO|E}tvEp7#IO#prs@ z*h=QD64Mu^MH_isSml_CbCLZc&(uOw)u>=4}6yl{-Ln9`?o`o z+>Gfz)OVj-klh&0aLr-j4PN_O1%e89-P8^lXVhg}X|q2+=bZZP$2%BPA6K%SZRkJw zYx3r(NRB5ZGFKg5N}BM$dHs_;CTn`0NBP&_Z%GH;f3WFVx%{2x(c89Xdc`W6cXu_I z6%PFT`m5~)!>@y!2RS%?7=7wmyW5tjMCa_IvwipErt~WJBpqnXu$q>}$nZT_H{!N# zhWw(q%NveMHU6-;TYiYitmW%^KgQ4n!X74$%&q4({=2Fv^QdVOGaKs_yNe}Vc?*PY zIG&ucZ{aH@t;V0a5epeJ8t0l`*vo#cj5{Zim2a0;fAgf1WqbCx+r5vo+fuVqY>Bp4 zRZi;V12-1@4T!j>9DaEA^Jd1CUXR|)H2=G|-L~K_i^cP>z1nqi9;oMNbTK^^I(>9; zWJBNd-#eIN-zOKca@}9>nC(kU28rJ@kf61|L~lD?)|bxCI$uu22WQ%mvv4FO#oEW B(J24` literal 0 HcmV?d00001 diff --git a/public/funiture/책장-180.png b/public/funiture/책장-180.png new file mode 100644 index 0000000000000000000000000000000000000000..b9345df59e308e8631965cedc9e906547f87ed67 GIT binary patch literal 515 zcmeAS@N?(olHy`uVBq!ia0y~yU@&7~U~uAKV_;yA`KAhzU@Q)DcVbv~PUa;81LIy# z7srr{#<#ca{SP@v9RDc4tgvyyjvX^CHa*ZzNd3sVTf#iPQK!#$mzAKk%Kp))cZcSfno1?rnAMm2{-FDTfa5mJ^AhPr0|*hCeAp{KI`21`S;_+7mArLKk3Tr zSYKUbUEgZ*;6>6hhrdf0*}FHeex1zphR;s?ioR*VL+LB}q8peR-u@CkV03~p=xQi&7WC*({TqK%buA`%N=~)_&oS7E8~0jQ9%qN)4Q1;r@ij2xc}#e WXS~Nv_w5V}3=E#GelF{r5}E*YhTIDP literal 0 HcmV?d00001 diff --git a/public/funiture/책장-270.png b/public/funiture/책장-270.png new file mode 100644 index 0000000000000000000000000000000000000000..f63d93ebecf143c515bfc8f8765beb5cf5685f1c GIT binary patch literal 503 zcmeAS@N?(olHy`uVBq!ia0y~yU@&7~U~uAKV_;yA`KAhzU@Q)DcVbv~PUa;81LHhD${iZ-tT;V-S$V^g3Ri@;q&el+gmW4 zz8w>}|7J|&e$U@_?&n{faG!Dg{K+Tw|GxY#?tA_>M&IbBiN>wt^8d8d8P_(dHr|-j zF!S)GrW=nMW*$s&%+a}E;bYp-+i)z+^{&FI7@0@U@3a3(T;}li9S1|esp^Jvf~UD$ zG}~vg+170ms9aNXB!_|bSl$P#%o)53A~_G|um-M7+}5m-cO#ZDu+u==;h|^a_J|q0 z3Nx1_l*_uXZurmYV!5r^Wt;wmj;Y&zR9SojACc7 zS@njIVcILXDqivL*)w)BE#k~g_MG}Dj$zj-nP2w#^KZv}E+~5V=IE$6NJH2{l zvqomb<_G$Rt}Hn)TVzdS!5T?Lv&0!|6}%+Uv{!t7uBh-kbPK1e!mdVFu5aI#^8fx| zy4$mfH85zy>E2|W@-k)xCy%?vNirRi=DpK5?_*>*Jva8i0mnR{j-XA=Y9b;r#r@sl zE}jPuEm-2xnCUp><7dOT1sWZv-pqTjBm3PZ1ubI<>!eig*0m<8w4wOS)VcK z2x3d-U%iPbkS{M^Ky0tVjE>9$(<8>T69c!hhXOFaKpOOili~;Vjo~1_lNOPgg&e IbxsLQ0GUyd9RL6T literal 0 HcmV?d00001 diff --git a/public/funiture/큰 식물.png b/public/funiture/큰 식물.png new file mode 100644 index 0000000000000000000000000000000000000000..1c445836e7fd26a2155e7e25433e733442652081 GIT binary patch literal 1138 zcmeAS@N?(olHy`uVBq!ia0y~yU@%}{V6fp}V_;xVIAHmQfq{XsILO_JVcj{ImkbOn zI-V|$AsLNtBdxQg9R=i`u5q7yNQFf?Albm9RXL(S(cP%Kob!Z-2LamxlT^;T~d)u}54 zpWF<(|M>qgwZ09H` zeU&Vh59ft_AI^PwFl(E}QQhO8|4x=Lo85MG?Xp|FA4DglpFZ0f;BhzqyY;VGU52ea z?{6q3Y3u(Ak>OJ5TatOln_J3`J&nO7<5IWf2ERAYZ*F?RIMt7<(?-Hc;Qq(2VXh2s zYgH68O!Zj8lk!Uc%$>Yl@yXpN%M0(yw^-Oos^&6%4VX7|{>6_O#xGS5nEzYaGS%bx z&9!Q-p6XdD$LuG3c=|uNsZe%7O6HD$PdEQ;Y87+Z^hYY9Y4;&!-WR)nSh6ly`YA_K zP1ZL+MZHp4WnJ~?Nil?gd&4Eyp`s7=16%c@jG!Yo%~a6{rhTxB0U$*i*skmc-4EAYizn3 zpWocFfK&Djqm9sw#3}yvHH*C4#F?m;6y39hSMb!?QHi_8TJ^sNF znXSlteAD^gi!SVR5I7WgntAWb8&R5@ex_=l&&!UyXQn0~c*B&P^MJ4Yq~+J1U(0-? zF|mu|UF(ZZ*WLF8Pv$@BR-J#?yW#DQr7u6%i|?`fG}G?FL21F|#a8y4&3-oOvAHmQ zd9CzbW_zo}p(?Xovvjxh8MwP1*e3ieV~Mn_?6RZl`zs6NL)b5_skQPceIZ-+{=x0v zwtH9p{9t_XeeGYn{#Oq*%9cl*|xgua2$l zPZC&tx3;$S^9Ko2{zah+oBg$GYngvPOXn|KU80;iMJP{7`tB9;#{W$Bqyobq>Cb=r z^zWNpqP41hRuXyvF(+<*J#Dh_q;n1<$G%Hujxry`Gm}@^uUlQWmw|zS!PC{xWt~$( F696zY66gQ` literal 0 HcmV?d00001 diff --git a/public/funiture/티비-0.png b/public/funiture/티비-0.png new file mode 100644 index 0000000000000000000000000000000000000000..797b7d03c8f8f4da7c2c9386fdcabe319a41e77e GIT binary patch literal 521 zcmeAS@N?(olHy`uVBq!ia0y~yV9;e?U@+idV_;xt4f=eafq{XsILO_JVcj{ImkbPy zhdo^!Loyn#&h+hTHsERHeI=!sZNi>#@$Q_Z>2D)4O-nc7;_c&1H(;|c%m3HwBs z=6-rAc$<^a#iS$SL3hZ`11=$R+b1uRVpx#7>*XYQk{f{rUSPf8V_Ce(zOa$CVo@^heF4;=n?IA2}JTjUR?L&RDhWrJwiI z-3!;AYq-z*)^EP@!<&A)ca@ocwRzuKw^x2mo9V-&bIX<*<{nvC>+c~HcQ>=QA=U9X zSAd61Md|Y7Tg>t;&(bEyJUuY~-ImoNKf2wHum9d`dOvX+>lW*kmOm8zyxDX-9ExRq zugdIc>ph$Ea@QHL_iS?n8!!Bsa!sVe@W-Srr{sb@%uOy=zY4p+ z*~`~{s^8)5dHqCpf%59~qC(F`d#{_K8(DtbO}*1Epsxh5x8_v6bw zE^SkWsiF5Q7?{1Xg+((0_##X*w0j#u+qX@Mxh=z%tI9Z^RrjY~AM^P-!FSRg@4U-y z`*GY`7IgB_rWbQA`iaEV_z7QpC1UaY|Kp|Nak>J67YoiMI(^7$w~l$S_S=$MTxCJG hJo6`QS@55+XUEqY&L?u_GcYhPc)I$ztaD0e0s!mN?==7b literal 0 HcmV?d00001 diff --git a/public/funiture/티비-180.png b/public/funiture/티비-180.png new file mode 100644 index 0000000000000000000000000000000000000000..f8844bb6a49693dceab09c701d61d90b82fe6802 GIT binary patch literal 416 zcmeAS@N?(olHy`uVBq!ia0y~yV9;e?U@+idV_;xt4f=eafq{XsILO_JVcj{ImkbPy zQJyZ2AsLNtZyM$`I|#HsRCJ$lY_99X(?8fWW1a_CHou?5y<|bDarl9&-2!pf&b&MG zPT^<1?gQbd1fC;jjE&EiENC;0aA~WXQ)|00Fy)V$lW+|3YST<^Ac-j5`c zSB>l47Eh}%Hpyx3~bpcUS#CTDxTH-x6y}rn=8;a+3c)O_UVeU+vM^65ih` z_~B@Cg@4W0`1x`_UbT03@I)s+Id5_8o!!iv!iKE>=cy?v?TV>i%jcZ3(PmoW$_|gB zsy+VmOQim<>VIrjy<{5if%xskSNGjL_vKo?nCa|KMdE9=JzKnzHE!$1`-k;BkzuD|EWAD|< bh4SCx)=o&78o!r;fq}u()z4*}Q$iB}wY$U9 literal 0 HcmV?d00001 diff --git a/public/funiture/티비-270.png b/public/funiture/티비-270.png new file mode 100644 index 0000000000000000000000000000000000000000..6198090777bd2dcae6a4c80a5a60cafc918fdec3 GIT binary patch literal 391 zcmeAS@N?(olHy`uVBq!ia0y~yV9;e?U@+idV_;xt4f=eafq{XsILO_JVcj{ImkbPy zj-D=#AsLNtZ|vqhWFXS|F#8Bg-irXPX^G5SS#3#dWr>VkTTJ2@S1Gsd$-N)0^6!%C zpOd>RG#br9dOkY4h^$e}W)j=!_I=|C)he#;n1$0foM5fe6`Q%Jc;g9{*e=&qFQRmU z9E%etYRr=EcDWD~ainY7F(t7rVq&2Sw{Bd)k=yDTnUSp%)%vZ;b#q33gh|)8E?4`E z_Yor7nBH#N%r@nVd-m4tY)_^HacvPb*>K`$MU33>i(jV%y=Xr9>s0l2bt{wg2Y*Ry znSIi8{(66A+6VrEmA7sEPJUs?eiI(61_66RiBDh-fgMwNxLXB+w;s{ zjakXcC+(B$Gu{Pn+!fo^WmsqSUC=}759^itwJVbP0l+XkK&I+o= literal 0 HcmV?d00001 diff --git a/public/funiture/티비-90.png b/public/funiture/티비-90.png new file mode 100644 index 0000000000000000000000000000000000000000..d5c096d35fd2d7921cf011e6ee34b6f2225f2f75 GIT binary patch literal 376 zcmeAS@N?(olHy`uVBq!ia0y~yV9;e?U@+idV_;xt4f=eafq{XsILO_JVcj{ImkbPy zMxHK?AsLNVZ{FrTWWeJPDE_fGz%AkbOo@d~It=mK7X^BM-jMvAFF-c(o$@Ocb*-ge z1O;dAQB-YQ+AaTd$COLY#cTH4y0|=f)p<*MzD@*JtKFd>juOpjF&DQ+6gh5B%GB5; z?(KXbD#FM$JNYC_ZmVkO7Sm}V7Zz{0(kj=xRBem+v{e`GMQAy>AG{P_Vxp6~XmL_z zYhT~eY`&=nBBFe)tfozCej9l}=&#AV?^X7$d-|i7HqL!sIqAg<8E?gl)p%`e7Ioba zv9Ml!_gB%Iv$dkCdA|iY_8$rouQHi7>q1<_DyQ!W{dp&5Ws5D0-dG)Qd3yIXsf_g( z)uM{ib-&fMUON)CCnUph|2_Y&D=TbcXPx?=IbSLJgZO#h^^GpVQtAv03=E#GelF{r G5}E*&1)mxK literal 0 HcmV?d00001 diff --git a/public/funiture/파란 침대-0.png b/public/funiture/파란 침대-0.png new file mode 100644 index 0000000000000000000000000000000000000000..4430734fd74e0885fda6d643201094d4f5f53655 GIT binary patch literal 680 zcmeAS@N?(olHy`uVBq!ia0y~yV6bCgU@+ofV_;xlVa~8;U|?V@4sv&5Sa(k5B?ALf zlBbJfNJit+S$n;h9Yx&iQx7V6$Q|%o^VX%NT_lrPGe;>ycZqGywshJbJ+0xR(ltGDM#rn(w3_nj&29BcJ}whlJcU$6)s#36sYInECRrZ)US{6d zYSLb?-)$AAwuavykIpJx+_NDk()HP)1LwY-d?jwmBFZp(M^MGVPgM$x5#7r< zPqzp;q!k7yO5SIb=)TQ$`UjUo^qlAjwf77`M`O89KM`#RvdK@Byw0f7^?kQ;{vo4v zOdcZqu2C)44BzI?&fdYKF~=fN+9C01=Nd+lxH$&A3W0yV)(SjfS>Bw-u>Z*8Q|eZG zoxkjEzS_p+7R7KX==~Qy#sym#|Li*Xi0?`aO|tSZN@ZZTUOScD-VPmXEa2t;H7BOLlN6tlrS` z`Lbj>gVm+XLoRv8gKjfiS`wro#u<+y+7Y#p>%`JJheG( z->nUnIUfj{@!{TMqg7lAIjx-UZS|DH5Bx~G_nALGxWREoLVfkj?)^t{mI`jNxM=lH o^6{ghFZwIYXBmFq{r-NC#hUddH{PW%FfcH9y85}Sb4q9e0J51R3IG5A literal 0 HcmV?d00001 diff --git a/public/funiture/파란 침대-180.png b/public/funiture/파란 침대-180.png new file mode 100644 index 0000000000000000000000000000000000000000..ad0a1e5b64ba7519aa3457015c153a2bf54b9d12 GIT binary patch literal 595 zcmeAS@N?(olHy`uVBq!ia0y~yV6bCgV9?}XV_;y&6`GaKz`(#*9OUlAu$`{jz6LH54OfrKh)(u~^w#FiG zed)%yZx^%5XY?6N-14L9CcDY|4L*Hu`(_?ubHBj1f5vQX;hO6Ik+BRDMf6?YwEV7q ztagaOpjz&&+}DF2*cd*1*)h|mgyB)}3$KVL4`ll_83JdhBx?GI-;?TKc5qJRPJ$NEhw$z%UK%BA#7P@s-ypW#j?AH1RNRGJuHuz)SC2X3DX6=1V3Gd z$EV(gFloeYS|-;}x^`X`!#O_9m8=i`luYwtm@4a?%)j8%=L#Rj4$+m{-CRyEctq%2 z+EboT!?r+3t!eALf7}P!k`K9jm=_($ka|H-t*KkMh+#YbFUA=h!WTP)lNhc$eGe%W z(^vL!QD4{GYaqCG#|@c<`*w0aT#~WXy62x<(NTF0#q1i1h40TZFfcH9y85}Sb4q9e E0HMYGFaQ7m literal 0 HcmV?d00001 diff --git a/public/funiture/파란 침대-270.png b/public/funiture/파란 침대-270.png new file mode 100644 index 0000000000000000000000000000000000000000..686012c8d58965d4de188ccdd25a2da957aff4c3 GIT binary patch literal 621 zcmeAS@N?(olHy`uVBq!ia0y~yV6bCgV9?}XV_;y&6`GaKz`(#*9OUlAuje{#+D1<~62+X;BaB1^{ zR}acHmQHa>FZ|4XW98*i4*SmZp7Ndh?SlUmp8Q-D_pXlffu?z2|HtEYVv8NZe=l6u zR^oW*dN}`Yb!CGLE{Eu*RU%x)I^moPBpQkfB@^YQGR)~*&GC5(=Yd^2{1WA6GOX#G zE%Ho|^T3WBzKQb|G4yoq7I}7(+hO+(|3fyXLpM$3mpVJ+Z2Dye2C1_%7#ZH4ez3Vf zY!d%O!FhYsO5!XUf(8FY)i0M$-@c=>N{6N4_qUAaN)s9U{AMV#G*qqSV)*grr)!zL zenYUhTA7$;662b{of1-&5wbGEYDMAc$C)y=UXH)LoWZ5F^HA!`jSPz{M9Xi!O>I5@ z{~qJTuRj(th+VdOpwY1D(DbXO&o*Z&gmz5eP1xzRr9Ck0$IG953QZb{DUM`l>@VUQ5;O7;edxSSL*7jbqE#I?K$~!l`SzJ%?e)ZTf`*r4|=YQ_e&cijewF?Y-p5B+@L zc0)*QPWNpwHK&wo*Jn007shZ3C*I>Zp2D!MwR7&ec{_K0W2g~SEBgP~iur@@41ryh zes^uBFS-*1l7KC4CU|?YIboFyt=akR{0MSwpNJit+S%%(+9VFWBdmMB;ax-+!U6()nvb)5rc5D$~SHI}EL8C;Y_bf8-JhbT2 zC58(V0+aeK4Vim*p6{0+Bl>p8X>9j-8G zC}dSR>-X6rXx=?Pznlthbu`y8*>iG=Uj^uK`PT_Tk*^`kt*Ogg7SU)=A zd2OZm555KUB?7neb>7YT@c4`7r8EYsokwHE{ggLXTx~sh=uxSl+R8_z!fKt5N(JM7 z?_u5``?|mLy0?Ud?d|46I@|08)-V1LUr{P5*Uxrv-@AvNOWr@LdQ@qBHu-7OmMsMp zu2c8(>Kjkr$CT_nLuGG>hVPwi1yZfu({+8ggv(uLm@qte`u5PR*t@2Qj~t_qOy@cf zns|w!;p^4R4^6$=;%bafChB?3II^x#?#CW`ex+=N$fez4YMtihml-Z;c+X&Y6kBgU zh;Z+c+=KAv$u%YyjF>o_O3a?e;} zd>}M&(rP`T8k7X`Pqzr_FEI{V(oqmv8^y j6t;VDPEB-Pv%cq|^}X(gVk{UK7#KWV{an^LB{Ts5QcEuB literal 0 HcmV?d00001 diff --git a/public/funiture/파란색 탁자.png b/public/funiture/파란색 탁자.png new file mode 100644 index 0000000000000000000000000000000000000000..de868218719d7a32b7179e57a0911a6bfa6f4f04 GIT binary patch literal 423 zcmeAS@N?(olHy`uVBq!ia0y~yV9;VAnXC#d%p@9c!wd|AzYtFKhX{BW$mJHOZQ$;BZe==qQg!KJv%51*4Ml(GFPL#*TlJ*nK4ta`59lrUS+g~?B=56R zAZ^*6P%V- zmnQeKI60_3yX)eiv0L<1UgU+-KSgpc%l>8j;5j?#cW-2>?#*SXwO_q6S~o>6d?UuZ hRQ!>=Aj1zv)81E`N_q{d7#J8BJYD@<);T3K0RZ6^xmN%H literal 0 HcmV?d00001 diff --git a/public/funiture/회색 탁자.png b/public/funiture/회색 탁자.png new file mode 100644 index 0000000000000000000000000000000000000000..bc1bb49562e144bf522df29e70655f5bac5a8b94 GIT binary patch literal 422 zcmeAS@N?(olHy`uVBq!ia0y~yV9;VWmBU@!kS)>pTh=CW^W+_fy>^|^hGR^mU-A1h}rH7od; zn6bdGx%ofa70!x2rkTq$85DR9C#Jd{lVCXT>NE56*MG&Oj(S$QwzF{uSjE3@xU=}G z>ydy2X@R4)QF>l^(}l%Omsa}k;r_#=p>}2MJgs_ee||~n9OhHsUoTx$I`g{t4c0AB zWBNB8h;8g$xGy0-Av+`5fcu8zEtWZ{lDsc?r@lIHOhPJPmSNihrmjaVeJsLSclFf2 zc`V>xab(Y|7s99Vnl?#`f2p{^-u-meKZYMmd^f-9b4)c2^?m&7_3gon4?p4=7#J8lUHx3vIVCg!09`b<)Bpeg literal 0 HcmV?d00001 diff --git a/public/funiture/흰 노트북1-0.png b/public/funiture/흰 노트북1-0.png new file mode 100644 index 0000000000000000000000000000000000000000..0fd0b4cf829aa7d988e65188dd00983e883a3e59 GIT binary patch literal 265 zcmeAS@N?(olHy`uVBq!ia0y~yV2}i14mJh`h9fUqlNlHo7>k44ofy`glX=O&z;M{p z#WBRA^XWBPz9t6&)(7ny&CKpK_szR@qar{$+1vlPZ3c(!%}+-Q$S1Y1$gwoW%K| zOM6D=lOuQTPvu@LHt*<~mTd;nHnHCq9)9t3bK%avkq6g^`6$XAvr&7p;`}1@>1!66 Vo_@Wfje&uI!PC{xWt~$(69Ca%ai;(P literal 0 HcmV?d00001 diff --git a/public/funiture/흰 노트북1-180.png b/public/funiture/흰 노트북1-180.png new file mode 100644 index 0000000000000000000000000000000000000000..588886af5e95add063a3965372cfce67e1643be0 GIT binary patch literal 235 zcmeAS@N?(olHy`uVBq!ia0y~yV31^BU=ZP8V_;yYD4({Mfq{XsILO_JVcj{ImkbOH zOFdm2Lo9leEB-#b{QtVV-QV;DiU}^;9YPxVCqA2Y;gHdsX#tmwnx+LDHd>^+@QBeQ zUB%-@YDGE&$m*;)+~z0(qs9z8BOVyr)_4rk^ts2=jz+9Sbjprd%*D28F$s}E|nSyS0u rM0ux(Em9FJ`?8`sKu1|sgK>98#rKuJe?MbjU|{fc^>bP0l+XkK8xvTD literal 0 HcmV?d00001 diff --git a/public/funiture/흰 노트북1-270.png b/public/funiture/흰 노트북1-270.png new file mode 100644 index 0000000000000000000000000000000000000000..62a1876dddafea0e8d80b1dbf9d7b8e80deb553e GIT binary patch literal 237 zcmeAS@N?(olHy`uVBq!ia0y~yV31^BU=ZP8V_;yYD4({Mfq{XsILO_JVcj{ImkbOH z%ROBjLo9l?PS)mYFc5HAF0X=Gc&=D;;_Fr+>**%tKiq}1 tHXrot4Ee^Mt~%!ot6tyv|H(y6;Y=xwZ+|Sj#K6G7;OXk;vd$@?2>>V&TT1`{ literal 0 HcmV?d00001 diff --git a/public/funiture/흰 노트북1-90.png b/public/funiture/흰 노트북1-90.png new file mode 100644 index 0000000000000000000000000000000000000000..eb057e71f3158b47ebad90c275a15c0f73c7daf0 GIT binary patch literal 265 zcmeAS@N?(olHy`uVBq!ia0y~yV31&7V36csV_;y=)_xbuz`(#*9OUlAu zF!6C@%#iH69_YT-tmmiT#0HT?haU1xB!~=u|k44ofy`glX=O&z;M{p z#WBRA^XWBPz9t6&)(7ny&CKpK_szR@qar{$+1vlPZ3c(!%}+-Q$S1Y1$gwoW%K| zOM6D=lOuQTPvu@LHt*<~mTd;nHnHCq9)9t3bK%avkq6g^`6$XAvr&7p;`}1@>1!66 Vo_@Wfje&uI!PC{xWt~$(69Ca%ai;(P literal 0 HcmV?d00001 diff --git a/public/funiture/흰 노트북2-180.png b/public/funiture/흰 노트북2-180.png new file mode 100644 index 0000000000000000000000000000000000000000..8e811a5693ddb3ed4af8f965cb3a171032955471 GIT binary patch literal 242 zcmeAS@N?(olHy`uVBq!ia0y~yV31^BU=ZP8V_;yYD4({Mfq{XsILO_JVcj{ImkbOH zYdl>XLo9mtUbW?GP~c$;_`q=NX!VYryQReWUnRxdyt$*D`y-Q8qKnp+KRXi%(3=E#GelF{r5}E)9tzS|A literal 0 HcmV?d00001 diff --git a/public/funiture/흰 노트북2-270.png b/public/funiture/흰 노트북2-270.png new file mode 100644 index 0000000000000000000000000000000000000000..6226b7bab6c1bacd497d66a3c66a0cfbb3a8751b GIT binary patch literal 240 zcmeAS@N?(olHy`uVBq!ia0y~yV31^BU=ZP8V_;yYD4({Mfq{XsILO_JVcj{ImkbOH zt2|vCLo9l?UbYr;Fc4{dD7@HA>i31E*QI(}vwFhTZ|*la#o(R5@ZU*V=OI>#7;;U5fkS6@M$r1YZAJ&>(5{K0AC) zHKXy0_5H==%7*seEy_>SZFnT+baZ+tGsBt7C!DUhWX*}bZr0=yv~gYTKI0#;N90Vx w?>Gf*+;7p@lC;jEyI_XDO@*EM{9D{+H`3Gg?m9V@fq{X+)78&qol`;+0I2<99RL6T literal 0 HcmV?d00001 diff --git a/public/funiture/흰 노트북2-90.png b/public/funiture/흰 노트북2-90.png new file mode 100644 index 0000000000000000000000000000000000000000..eb057e71f3158b47ebad90c275a15c0f73c7daf0 GIT binary patch literal 265 zcmeAS@N?(olHy`uVBq!ia0y~yV31&7V36csV_;y=)_xbuz`(#*9OUlAu zF!6C@%#iH69_YT-tmmiT#0HT?haU1xB!~=u|k44ofy`glX=O&z;M{p z#WBRA^XWBPz9t6&)(7ny&CKpK_szR@qar{$+1vlPZ3c(!%}+-Q$S1Y1$gwoW%K| zOM6D=lOuQTPvu@LHt*<~mTd;nHnHCq9)9t3bK%avkq6g^`6$XAvr&7p;`}1@>1!66 Vo_@Wfje&uI!PC{xWt~$(69Ca%ai;(P literal 0 HcmV?d00001 diff --git a/public/funiture/흰 노트북3-180.png b/public/funiture/흰 노트북3-180.png new file mode 100644 index 0000000000000000000000000000000000000000..3a69bf5409efd61b3e9e2ac988d25d7eef080f39 GIT binary patch literal 231 zcmeAS@N?(olHy`uVBq!ia0y~yV31^BU=ZP8V_;yYD4({Mfq{XsILO_JVcj{ImkbOH z3q4&NLo9leEB-#b{QtVV-QV;DiU}^;9YPxVCqA2Y;gHdsX#tmwnx+LDHd>^+@QBeQ zUB%-@YHVz5Y{ks#AYAlDiEF_Rmb8l}xqo+D@>!FAf=@38eqZ&VdarF{cX{Bknx#t-7Mc+i}Wgir69* k(XuZqssnVCRW%qNmS%l^e4e3(fq{X+)78&qol`;+0DYQQvj6}9 literal 0 HcmV?d00001 diff --git a/public/funiture/흰 노트북3-270.png b/public/funiture/흰 노트북3-270.png new file mode 100644 index 0000000000000000000000000000000000000000..9fdfe3e3dfe73566917e3966175a31f80f7542b8 GIT binary patch literal 233 zcmeAS@N?(olHy`uVBq!ia0y~yV31^BU=ZP8V_;yYD4({Mfq{XsILO_JVcj{ImkbOH zi#=T&Lo9l?UN#guq#)Ar@F=r^$OTa zB4NYhnhs8eGxI*~S$LwpMkA=3-*HKW_@QI71#)fPU-&e!?2BiVzoVjUp`fJT`RG5w z@<~Yzmp}R_KULZK;qONlhCAz~&;Rk-_A`fc{@o{QRx0hi@g!%b>c?GMe)s85h|AH9 qbKP){%jMfx*+&&t;ucLK6Ugz++|r literal 0 HcmV?d00001 diff --git a/public/funiture/흰 노트북3-90.png b/public/funiture/흰 노트북3-90.png new file mode 100644 index 0000000000000000000000000000000000000000..eb057e71f3158b47ebad90c275a15c0f73c7daf0 GIT binary patch literal 265 zcmeAS@N?(olHy`uVBq!ia0y~yV31&7V36csV_;y=)_xbuz`(#*9OUlAu zF!6C@%#iH69_YT-tmmiT#0HT?haU1xB!~=u|>$Gap*~>Sg}O$bkd(x(Rg;!D<@{xFOzfP}=c*NCX2y19A#;$q z_sIu_9y$?^gb%a`7>1k>_Exb&HmB{|+;h*1Ys%~N-qw39+WdL--*;Eb8E0IU z@0;|mU`oOK>85`lYFO^?nEbhWhV1W#*Dh8P>f4@GJ$Ssa z7(V=b%>Mj66MM+H{`>Jo$EUMK%e!nh{`HSNP9VwVMcT0t#&x%u{=Q_{eY^Tmu|CJf z&82J%75~1ZKCE0K~a8k78nZ2qD=7jVL8T5p${J!gi=}Xpy zVxBYgr(Fv$y>)U6pU+nH?HW$6C&YL$pTMhw@V$y z0+OqlcVAm$yybe$PEv*9MjfwFowd$3Og5b3{1z@N(^? ztl>4?pC{e^PF1GYs~fiX|KfU~fUi&9`MtRIon>8Y zE|*$*DAS-E$*@xm(i5T&NVNvp0u zUmmyV+@eXE|D>H68&+=!ouZuKWj*(PUCxUOo)OxodLJb1J9785GQ)#!zuc`bd{)X_h-H8U_g_434~GXKc9Ex%tn+EvYD*?9lH_6)m8KfipR^ES5qf!wXX zF9HO&aSC1QE!Id3cRWn^<gTe~DWM4f&pp$S literal 0 HcmV?d00001 diff --git a/public/funiture/흰색 선반-270.png b/public/funiture/흰색 선반-270.png new file mode 100644 index 0000000000000000000000000000000000000000..a8a219cbc25482d04b48db9f4fd2730bf9eae513 GIT binary patch literal 493 zcmeAS@N?(olHy`uVBq!ia0y~yV9;V`?tYtQW+p6QmGvm)k?;IO*x+wV^f?#` zCrQ<_m^&_5wesjjofiR{Ur#)uw?ywsZ&sF74&#G|@2;)B-{n02zMQ$8cjMfJg_E|u z_m@9s{)si(dFB3<%Z}arxN~+8x42E!BtDje);;_7Z`^6l;1H^sz-Sh>g?kGp<9a>4 zwHt31xwbcp_HnqV?_fB->UB`0*Y-nCA~Q6ebG`Eaar$|`@hbhhT2NNL=o>)h1Ez@mE zS9t7Q(pHopqcZ+kPgytZnGv?wHT3EIE)kRJQ=gpT{jJx#Ep5CJbAP+UEzO5H4gnUI zcW;yxeq2)$E&A==rG+g_x0y7r8P{lT(4O#UkI2KOoeo^pXH&Spu?FoCFIU?jGC}EE s+AC&H#f{$U13n({yw&#O`8)Ab&gYI+pJO`6z`(%Z>FVdQ&MBb@03o{ARR910 literal 0 HcmV?d00001 diff --git a/public/funiture/흰색 선반-90.png b/public/funiture/흰색 선반-90.png new file mode 100644 index 0000000000000000000000000000000000000000..40496d20966026183f571ac14afb8ade6a6d23dc GIT binary patch literal 718 zcmeAS@N?(olHy`uVBq!ia0y~yV9;V0OGC^JjrSlHIPP{zS)_q&CcKP#`1NUYJ_;h?aq zfqTcsU9Go&zmAxD>C~x3Op}*0Fzo(){35H2wui;dv{(J7ckJAK)v~8oHBp^f3M>ivNFf!9nYH5@Gn8C z`dsVQOz$9#R&JeZ8A3N-#_n*|lt~br-6qZ3{Nm#$FGK4o+%?tpYu6lADXLs5!7S~l zsrR7&z1Y$S!4=&f%WZ=W{7dNi@K)uJ#~)r^?IP2@TgNl| z$KA<`)33jI6QZ!BU|yPa@2N@Knpk|Qrj)Daod5plePE=pIm59)*J@3)Z-{yn=Kb*e@TN^#dcvV^vHHw~iW8sr iPYR!2`S|tdZ?hQ7 z8xQ@?8r$#PBes0{^)Qaet$%Z0@4d$Hf+toX=hUqp>D^~f>?qM?cyN6CgBLiDa4;~$n}0vl>2vJW4!$LIpY`{=m*}@)XcE{t@!|~@r(^r= z_UQCK{3P5}|Eyrc4h=gou894+F1cxNGfXX#W4Q2obIn(U^yfQ%{Naq3Q?uLuys)~Q zonhm%fYl3v&Mgi)xA;2$h1cwLCQ>t3xka>~REx<@bFGCpPX`&bUH2$oUiNOFp+chOB!rjy~UyX1UR*zLT|V zrDjJnG@QHm(C4?qv@=U%*M4AB1qgTe~DWM4fn=>Z^ literal 0 HcmV?d00001 diff --git a/public/funiture/흰색 작은 선반-180.png b/public/funiture/흰색 작은 선반-180.png new file mode 100644 index 0000000000000000000000000000000000000000..dd631af43b44455c795f6bb916b854b03287e0c7 GIT binary patch literal 548 zcmeAS@N?(olHy`uVBq!ia0y~yU{GLSV9@7aV_;xt(mA2Xz`(#*9OUlAu9jj*TPpf9CI9BUD4G0-uGqCmq{`2&OO}s^55R?eqc<*)dn5SlG^K?t~?_~4EaH=pLFs-Zl%UJ)OosnVh!GIY7qA6(t zrx=V7j|;*4++S1?OjX`c$XA z-NF6fuGUdrrI?;aOq?;ii`gc|_4ziI`1dhBcUa6KAlA~e_v6Cz-xqCGk&UbASsb`C zDD|n=)Y@AA8*e|eFaEv2BDvmazu2iQRv+Ux7M?7#eJReW$?DCw727g@u9OlrbHVLk~3PsJ@}SV(y$6c`p7 zUJPYtTCLNzqO)1KnN!c`wdI5IZSmFDt*czy_i@KO{AKg~qv$$@SsaQiwwH>ppFDcd zS-8mZ>72+(+bcI`SLCetV!gb5<&^sz@1}dK=HJ5f~H;XdZ^gnd(k?~hJR_^`6KodqV_T}Sgep=d^hVA>wz$ShWy8d3<>o= zGI*EsvWg-(~|9qOm6~QIYVa{&qU!QOOY03BXiw{&(uT5Z` z#`GhT<5keTt4s6zy)Hc8Usbz0a=oO5!iKH;czjfqobR3spUWa6FhOYFs{^*9E zoB}tt+lm(pb}+CXTgkcNfXz8ppM#2wyAnHgUoK?jUmHkm4AiSBQBrLziK^9JDa3A|IEJe?|bsB{FU6|QGb4ItYTnbVDNPHb6Mw<&;$Uc CEa)Eq literal 0 HcmV?d00001 diff --git a/public/funiture/흰색 작은 선반-90.png b/public/funiture/흰색 작은 선반-90.png new file mode 100644 index 0000000000000000000000000000000000000000..b210efc7b8d028051268d6aec4705fb290b4b3df GIT binary patch literal 607 zcmeAS@N?(olHy`uVBq!ia0y~yU{GLSV9@7aV_;xt(mA2Xz`(#*9OUlAu`Z{Z&$5qc5F4>k{6&!p=i!+L!6rHSnBBcGu`02h+)st*$D>WB5ev3$X^L^by z=5wr)Y|~Ab-eO?nUCY!Krud=uDcga_wHaT3Om^Q;wMm@g>as&0*X2K|yfmq?Q*uUq zmhZKOo@Jr_6*Es;THbh5!sNU{WhqOQb@Jl-Ep=bX&qZp>wv#4E0w#PjmdV+tj!rfgxhYu7h{I z9@nu9ZYJ^&rgnAefYJx9^_D{zf7pSW4XIH2)ik0~P`*GP@3(=bwMhVy@>7-Y1(q6H=TkXS6Lh=A15g zLGncU5`V;fuJ%kpJnwl>qA<8!LttavzVs zVqgq@yE7*I&GHEe*SBu7QefH~BzI^-LObP0l+XkKHh&E~ literal 0 HcmV?d00001 diff --git a/public/funiture/흰색 탁자.png b/public/funiture/흰색 탁자.png new file mode 100644 index 0000000000000000000000000000000000000000..9becce86612a2e0df09fd8feeee6bb21bdbeca3d GIT binary patch literal 428 zcmeAS@N?(olHy`uVBq!ia0y~yV9;V6kncwz-;B)QjvCjKF6je zZVTf*zTelS|Ft;3F#FQ}#q!JdPjR+nX^4?Hs@9WqSg!n>lt;ns_5L?g7!e zgv?q!r8cJ94Li6!1U3=Ol{(;(p zwa30{aNiNXA@z!@jJ2$-jCFIv-i5gbo;`G8wsKx-RS*}G;n4Z*v7Yy2g`Onk^N9iz zC%mspdw#jmR^iX!ymwq5j%pwHmuPeNr{Dd$dOQ9LH_YSbwk1lmy|4SS zUi|H!#Mg`r!JJ|O&Knvenplqr=qR)$FdDLOcPK_U@El}H;uw`05up+L^L+mPeA~u8 zPO;dZzo*yVsbZ29Mo$cTZdEb-{&Y5cxw!rR&+Gl|>%Tv)TUh^7i}l|4JV@yskBCP0MNlJvqe)o0O~-$6C6jnvUx9w`KY4sAx$r^jsa# z%PC&WA!e>Cx@!CWeSao>-v9sO(eC-J-QFzS-P5?P7C+A5J#V7@F`(eAiz1+HK3wP~%e>zcM-Q7=`56^Ak3;lRm|9#w_m_r7tG2U&j?(K8h z@y&5VS<=b?Tl2m{1fb30nsg4 zZ^9(@{d@S=V2#Ww!-u!z4{}|0UU4k1b>VlAk`J1R9og{9T-LU@bKBpaWk8Rhm%YIMWRonkgde8CD zv)XHB-tpPKo^|~WIpql9oip?93$Cu8G>tQS#e2Gw*(K%WJcP zQZE%ll24jnep}sB5c@3n5dR&Y`RDh2JJz4R!}9;7hw+I!XWGrLeS5dM?+oh|^>*HA zvtNF`dHvoU_PBnzb%$9`pZ)UlP4@b4C;u#Ndu?#A$oTHQt>0rW{nB=Ex6a=DI|1Z? zTfg-(|Ej)Sd~eSE+zoepw&$O%y`EF*yXZ#rjxuo_^UH6etM9Asz4Kb@o6x$uEUVjt zkDN3=`F6MdPo=Dha_fF1d=*%=@yYBb-|kM|v)+R@{LSQddCShH$IrEW>s?!9_f8b- zr113fzq_Us9AyE!Xm#wRXQ>-3U)VwQpRugP906>S_-y>Dgi z{MxPG_N>=<_)B8V%7s$VMltTYR_5Lp{=Lll(!NI~JcqmMi?UW6i)wp)!hGx7&F|+a zzyB?<#@+ero&R;`c1GsTul@G)t@YgKDX*N@%=3l{yvY_@^U!Ha+k)9wzuioa|Nnay z+v*+S>*nQ$-AT+wQ~tbNBaFwzvHI%tDi1sT;7uXGJyBIoR9YJXM1*Te|9$O z_nXc6dux}kudnzi?In2p;VzMtiH-YT6rVI-{dV*Decyijt-n9#{Pwz!KWpNiieA-) zikE@JYpOJ-)(As95kFV#cN|OhDgAeU)wX~l;rKo))8BD6FZV5pBsK&$$1)yJp*YyWh{= zWlODjzQ1D4beL+_rqC}H!oMs*DfRfipJKdW7ccw1@P4y8IbQbnvgj|%s{73s&fmPg zueS8f?EJ~!H|P~^{v`}jz5IFY>{_pivlsKj`fr-gtt}P$X380M$@j&feJ?@U=XRUl zmH&CP(|jQ)r0&$N?<<2k$^2*3;kY~}P;Bq~{q9~#{r1gJ=h&IwmEHuht8c@3-|wt9 z!jJE>s=oJpS+(=Gs~gv!6a2RGW#0VSZ%5x0U*6kPTl!{o@sZlRT_A%Df8Qwq1zQr5 zlDl@l-*n%6zHE2xx0~Xd&-;EC{Jjk1lg~R}=Ea--es#lq?(BEU-+Vzy|5@?nzswNn z{^HAb_nicJLDu~4+u27zaZ`91Y}g%yVdcNyY}QYkKl>dh)X&h;;qU*uE6GnXW&ihu Qfq{X+)78&qol`;+08_=U@&Et; literal 0 HcmV?d00001 diff --git a/public/room/room_2.png b/public/room/room_2.png new file mode 100644 index 0000000000000000000000000000000000000000..8003a19b3aec00834609f5dea1d360e5de89adbd GIT binary patch literal 3958 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 OFnGH9xvX=0.25.0 +Pillow>=9.0.0 +python-multipart>=0.0.5 +aiofiles>=22.0.0 +jinja2>=3.0.0 +python-jose>=3.3.0 +passlib>=1.7.0 +uvicorn>=0.18.0 +aiosqlite>=0.17.0 +pytest>=7.0.0 +pytest-asyncio>=0.18.0 +aiosmtplib>=1.1.0 diff --git a/uploads/profile/2___instar_1753881367.png b/uploads/profile/2___instar_1753881367.png new file mode 100644 index 0000000000000000000000000000000000000000..ff8c32b6d63382480e9ca2dd93e7175dad568c87 GIT binary patch literal 293806 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 z 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 literal 0 HcmV?d00001 diff --git a/uploads/profile/_____1755559451.jpg b/uploads/profile/_____1755559451.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c41146b708488e0adc9a02da25b50d73a2b7fd32 GIT binary patch literal 97541 zcmex=u3)QWWIwq!1Aqr2rCx;l$+P0vH<$&B(y;?HU6kNanIGh$Innrlb}pGcYiGU|?V< zDT;`UVqjoQVPIeoNr$j2KJwvVwaZ`lrS(bo&c#& zE+_)A?=Ubh*yQGvg6sl05#(Z?)V$DO1_p)*1_lNhhGK>w26qN0kR&xRB0TdKF)&zs zWnf^QfDlWX$-uC^m4QLx7D7yA0Rsbn3j@Qp^96}TiD0*|FfcGMrKK@2d|J-Hz#GZH zAbf#=fh!s;2l4^#Ym0@sa$Y;oBNN31lNM%r9@MOqiNM_JuP+%}(Fkmob zF#CU-!I^=VlZ%^+gO{6&n~#r|Usyp@SV%}%T}Dn^K~K}rKu=Rw$Jolt&e+V&Tu0X- z+|kX)FDN+3$Sx`|Dj>ltFvuTd2qPaKpRk~?ny9Fnzp1XNKgr<#0R}-1&IA?QJRC(gU|F;-;m>C(E1epaH>=_<2usVPhj}mAhz`Xdyb@vzNkL?b+ zvbHqg;_dA@vzX_w$9&~$w=9ikyMJ)s-SqnHTiP$#^fOQJ8~5GVV0oc5 zDsEzHy;E^1ch-HimA-D(-*TqkDxMKB{dwy3-d=X=oNASQ`xB%XuVwG5o4DZR)Q6|I z)r04hPuc#IKkk0uYHssI8xF6stdJDm>#BLO%=|s`4E782_+76xZS7asz9K(Q_RqV! zd%S$k-0Sk^`|;@IPl3JHRb%ESO}jHczeDB#+np#mzgUZpSw`CmoANiBePa%=K5M-= zR`%$*)xy>Rkvpf^PBo}@wYyhc{O*0a`K3Emg;n0u-An^kttcos#GSI|M57<~yzY$C z(O0L6?R4vUd^|gLZAHz~XL0*4{^8mAF!@Wp+@Gqa2enfcAJyGyw%vFC+}1*eS5=XV z9tO5|ugTOrF07vW@UGak*ZF+^TSSERfwdlho=Xm8k`phupc-ey)cX*XW};_Y(e z^kVhUtMxZFmVYk)aaQ--DNv(Nq>jG19QS3mq>sjb@_ zEi2=`0 z2epYmSF`_T@aNy~^Sj@cm|ShE?t%rYm#Z25zV)VO@wVSpJJ&fBJz!`6B`@~yi*j8x zx}vk^Je6_z))TIt9KVAvYS)`>F{VzzlizjSo&DzW=2h*oJ0cDGdsa<~5B%2SqZ6Yw zHDbos%dB@f-sH=MA3XStH+^wb-ujSTr;p^C4A(hcbCm$ z)tjn!E(kP$su+;9#9_W>$BPA}Yt4SGK3V!|!*tQovr8q9=l}cLQ2bzS?~?SCSF3$` zZ6srSEh2tYl)X)lU-`wK-Q&f)*v+wZDan$h>!))+idnRWX@>%X1M}K{LiKY*>Ypb6 zE@qy@exXYG60djA$&<_VUYrwoywg!bb+fPDquq;ly<51ZWW8@+?Z#OvZ#~{3Qg&}= z{>?XBj}Lyyjrup^arEqo-b)ihHP7*`x*fXq*4J07?wR+(D$ zl|Acb+&<_P_~_mJx_Sqh6$}j4vkkuVb-s-F_DUk~{1qdyKf*VU+1c)y6#eb(ZsW_T z3%_iQZTqt8gVAGl3%|L0XMggpyLz&sT-@Gq;(G~Wd zS2oelb*ISjvekWWS1h}I|CZqA3uR^{-HVM@6}G!SmNdCk8)Iq2?y{laUE9JH&#zv; z+88di@|*A8Z}-2{O|ZOBRx$bDOSif6gD)Fy__T4=>#R*3AKq{KGyms%%fHfY+e0JG zN;fX*$-47qTlU#F4z2^dJFfVvU5%~I-}ZLj6Sf5<5*3BVmmbOzo?QKYV_O;j6phjv zfx`QBu?qs3t+S_^o!YtHN`EFec_GI$^OhIu!sHe%NO>U{uBEead(8a0-?i;x5s{0Z zUtW5BmDiSyX@736Tra!Zy1Hq3maX8`4>7YAuU}gy8}qZ8BP{DyOUe1BHS=zKto~Zm zbk{yVbHCq9yYf~fS;04J@}3E9UVPJ=Jksq*{Y ziSCPc>#Pp%_qeXITxQv?o%^EA?|x$~tQ5aJb)xkrovG7qe4n!9=eBH}(z{B3r32^b z-rn);y6sLsJJkaBLjCXY{4f7ATstT8PW9jGhkxyV-8|gDz*u_W{c}I|FZbVUwwv{z z!PeWhH z8{g&nmP>D4V$zM8mTO^raJ5?Dv5nict|#CB&#+im-e-UKmFy$OW1f7UvU{Q2x3d-z z)1N=R-rXHNcbn~^=|A6C%e+~W*Zwl!_wrL|Q}0J}zw00P&tQA{Ig`BqR<67=$1fKy zJ<6l8{;R^3qL3n@(DK{@8wYZoOYo_MxMPE*Q#PeSFaGeDu5f zFYB!=E-bwEpMmZEIqv@qpEmv7Au|z$%Tgk1anV#ZPGZvKOB+L;EDfI3pLgfyr+0c^ zcx-xjg~f&S&TV?NaLc^kZ_mEjm%8a^U;dK0W__xsrQKh>+ob<~y7!#$l@-71PhDK` z<(KiLgbi9#E3fG;KeD|yZtLS$zdY6*v+5Js%9)@u>t0CmkyrQU-G9F0aed2whW`v} z{xi(}&)|3@d~$82x0=}5xTVL|+&}l|T}*-{$jnR`rN7In)cBFsWOp?3z9=; zu1iXe+rI9!MM~GF^NYg{^-XvfowFm6+dTgn$1hPUy>6b?&Y8=S4}Jd=GpWXGefavL z!gbF|?9Xng?g+g2_S)uY3s--g8p^s&&m`s1gT0!jKVttaGTU12@uD>)pL~V#|@MYtCHx@-$@9@so$AZfZOISY7TvL%2y!zuT8CTM4_2yJJ>W?2N29x6Y1lRc66T+dI|P<_hZ;$DBKPZT+RJZ33H5J)63@>z1jj zzM1yE*!_mWKfI4OA3b#P_WQ29{aM-dcfZW#e(_Iw*@@kHkLS5hSzR$*MtxKC^6jf% zTGY+U4t*8XTCwAD@N(&rC-XHuzy02J`yRU%gO;w9gBmo zYuwXpr^T1u%Z-ihw~wybw_*Lvlwg~j*@bVTBSY?}Ztto#j@+#D^2w9i6SMD~PJ6Dq zC;INJL&$|IJ~sQsUxpWbZC~z~)q3t_$~mp88aEyv+;6(=_&L7sjxV>d$xZC>TP1(WPI}yaY+ZJy>f`N=!b|?jERQ+%xSh9h>iWGmAAd@H z^{d0qi+5+l^~5JP`zOb&-nMIJyffzo$KxGRP$YLw5?R9y2*PM8X2wa4R!ACDtZ%r$g@`G^wOv_ zyXkB9*qGX_U)}8GUv}HwbIF%ruj7~3McwT_^=sdzBg?K&KKjir_RsGB48OH@2VCBA z=FFctt(U44rQgo^VUhC9cl-AIHBY)_i#>O{U6C`L6z1gJw^}^q(QnBZhEoD_Cp}ze zH2Lipyt5BXadqZAD3a^*595 zf0(%chvk2U-|?>&|7Qq%{-N@8{5kKB{@*UX|4{s&;oJVJ?*A67(_p@`W65;A9Hry_ zhtFUC9Hv`tt=l6rJvRBK-hT$+^%qS%OZ@iq#)r(>6u9<~>4iDl?jL>o>YGg4$|bL) zM6a${zxUjY?cy=t@0Ndd{qC^U=C*0S;C4% z)m}5@R-Ep;TKOdvyZAy3;#RII4ZR%QTe!+|XIb%+`Fe5eysI7@vsFED;PAtnPjJFJRGyxjy8H9VGw05mYB+V`!vO#3O&?9Z^u790Yc#L#;aN-F zHD@;2x0~PnTFbsye$`%a&+SVr3;eF{tq7R@(DU2r*S|c2PW823eB@ZQqTrLkPsE>4dAeEXmHd#x>8 zdi$*k7OlLk8lCH;=bwAM!F7jfjr9DVeEzSNe&cU0{?DLz@^8q#1D3J=Kb`K+e&rIB zw=s6gtMc$1RnB#?k5xCvWxZ2mKnGU7%u7NZJvi@uHKY8&&70eE_;MJp{bYAus<$;O zl1p}Pbj-iS?jF0GyC*Ndx-?VNYQyTc`I9G}X|S4W9C_&Yi@3DexxFd3HFq3upL|z$ z=bz*HVvkidw#}+uw!5D}w)WSv`Rhtble0dTKEL=Uc9r!X)(~_=F&MACTeQvATV*MF? z3@?8vug|QK4L_|f_4CP1-KkTL>1X8LJiG3b>#q6E`rFFxE`4RZDZeXd%I(~L8=f$T z|JoPsrh9OT$y|HAIrCJvyqWeo??1!g`oQ&zcFkj(xZAfe5IbA>B{iHnea_*E^?ySkZ6DCbb**%N-^{n$A1zW6=Wme1Hl+n(5 zxLss#{(;5wKXi61{=V1lr}v>?&$`dgzuiu~cIx(W&2#>hUjAh_8^T@Jd^sL;RZ%Ou z@aXaB>Rk8dsy=x7EvI+^Xt)eLHR9#x9XYk1TTN18+o{zF-+LC7-IO(6ZN1o1aLUu( zmG14W&b3Q^Ot;wg?%eS&b0nCTU;Vn)I_9G2%nhYkUvec*2|mrbKkwiA`!|Xi81!~o zhfSSny}?xF)pq67{z*$u?W{1pd1fg?E%UM~nGx4hQlGuA%X9VGQx$xB_05{{&;J?b zbH(-Edb;>aTiDG#PrG)Win*Wln=h|;?xaVXiYC9g=U*&fH07!7jweqKZHwOfEsjlr zvHHSaZ*i|{dlnn{neJLDd+C1Kx8Iz$lGh5h{G0SFJ!Pj;_rs*Vi}!P%Et$Sk<^=PS z7i}BcmuB6pw45|0d(*PTo9@pSs^)9YwwUEV{b$OOU9Tp!ovyugfBL231O^7a{nAT* z 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

  • Zw-zm0NZc)Tu`Rj(u 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