Skip to content

Commit 39f733f

Browse files
committed
2 parents db0a039 + 2b7972a commit 39f733f

11 files changed

Lines changed: 89 additions & 32 deletions

File tree

app/db/init_db.py

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from app.db.session import db_engine
33
from app.models.notification_model import NotificationDisasterType, NotificationRegion
44
from app.models.region_model import Region
5-
from app.models.user_model import User
5+
from app.models.user_model import User, UserRole
66
from app.schemas.user_schema import UserCreate
77
from app.services.user_service import UserService
88
from sqlalchemy import text
@@ -20,19 +20,19 @@ async def create_db_and_tables():
2020

2121

2222
# 3. 테스트 유저 삽입
23-
# with Session(db_engine) as session:
24-
# dummy_user = User(
25-
# login_id="test",
26-
# email="test@example.com",
27-
# password=pwd_context.hash("test"),
28-
# username="관리자",
29-
# role="admin",
30-
# profile_imageURL=None,
31-
# status="active"
32-
# )
33-
# session.add(dummy_user)
34-
# session.commit()
35-
# session.refresh(dummy_user)
23+
with Session(db_engine) as session:
24+
dummy_user = User(
25+
login_id="Admin",
26+
email="resq.404found@gmail.com",
27+
password=pwd_context.hash("Admin"),
28+
username="username",
29+
role=UserRole.ADMIN,
30+
profile_imageURL=None,
31+
status="active"
32+
)
33+
session.add(dummy_user)
34+
session.commit()
35+
session.refresh(dummy_user)
3636

3737
# region = Region(
3838
# sido="경상북도",

app/handlers/comment_handler.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ def write_comment(
2424
session: Session = Depends(get_db_session),
2525
user=Depends(get_current_user)
2626
):
27-
return create_comment(session=session, user_id=user.id, req=req)
27+
return create_comment(session=session, user=user, req=req)
2828

2929
# 특정 게시물에 달린 댓글 조회
3030
@router.get("/comments/{post_id}", response_model=List[CommentRead])

app/handlers/post_handler.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
async def create_post(
1616
title: str = Form(...),
1717
content: str = Form(...),
18+
type: Optional[str] = Form(None),
1819
region_id: int = Form(...),
1920
files: Optional[List[UploadFile]] = File(None),
2021
current_user: User = Depends(get_current_user),
@@ -24,6 +25,7 @@ async def create_post(
2425
post_data = PostCreate(
2526
title=title,
2627
content=content,
28+
type=type,
2729
region_id=region_id,
2830
)
2931
service = PostService(session)
@@ -32,6 +34,7 @@ async def create_post(
3234
@router.get("/posts", response_model=List[PostRead])
3335
def read_posts(
3436
term: Optional[str] = Query(None),
37+
type: Optional[str] = Query(None),
3538
region: Optional[str] = Query(None),
3639
sort: Optional[str] = Query(None),
3740
session: Session = Depends(get_db_session)
@@ -40,7 +43,7 @@ def read_posts(
4043
if region:
4144
region_ids = session.exec(select(Region.id).where(Region.sido == region)).all()
4245
service = PostService(session)
43-
return service.list_posts(term=term, region_ids=region_ids, sort=sort)
46+
return service.list_posts(term=term, type=type, region_ids=region_ids, sort=sort)
4447

4548
@router.get("/posts/me", response_model=List[PostRead])
4649
def read_my_posts(
@@ -60,6 +63,7 @@ async def update_post(
6063
post_id: int,
6164
title: Optional[str] = Form(None),
6265
content: Optional[str] = Form(None),
66+
type: Optional[str] = Form(None),
6367
region_id: Optional[int] = Form(None),
6468
post_imageURLs: Optional[List[str]] = Form(None),
6569
files: Optional[List[UploadFile]] = File(None),
@@ -69,6 +73,7 @@ async def update_post(
6973
post_data = PostUpdate(
7074
title=title or None,
7175
content=content or None,
76+
type=type or None,
7277
region_id=region_id,
7378
post_imageURLs = [url for url in post_imageURLs or [] if url] or None
7479
)

app/handlers/user_handler.py

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
from fastapi import APIRouter, Depends, HTTPException, Header
1+
from typing import Optional
2+
from fastapi import APIRouter, Depends, File, HTTPException, Header, UploadFile
23
from fastapi.security import HTTPAuthorizationCredentials, HTTPBearer
34
from app.models.user_model import User
45
from app.schemas.user_schema import UserCreate, UserCreateResponse, UserDeleteResponse, UserLogin, UserLoginResponse, UserReadResponse, UserUpdate, UserUpdateResponse
@@ -60,6 +61,20 @@ def update_user(
6061
user_service.update(user.id, req)
6162
return UserUpdateResponse(message="회원정보 수정 성공")
6263

64+
@router.patch("/users/profile-image")
65+
async def update_profile_image(
66+
file: Optional[UploadFile] = File(None),
67+
user: User = Depends(get_current_user),
68+
user_service: UserService = Depends()
69+
):
70+
if file:
71+
file_bytes = await file.read()
72+
image_url = await user_service.update_image(user, file_bytes, file.filename)
73+
return {"message": "프로필 이미지가 성공적으로 수정되었습니다.", "image_url": image_url}
74+
else:
75+
image_url = await user_service.update_image(user, None, None)
76+
return {"message": "프로필 이미지가 삭제되었습니다.", "image_url": image_url}
77+
6378
@router.patch("/users/delete", response_model_exclude_none=True)
6479
def delete_user(
6580
user: User=Depends(get_current_user),

app/models/post_model.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
class Post(SQLModel,table=True):
88
id: Optional[int] = Field(default=None, primary_key=True)
99
user_id: int = Field(foreign_key="user.id")
10+
type: str
1011
title:str
1112
content:str
1213
region_id: int = Field(foreign_key="region.id")

app/schemas/post_schemas.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,26 @@
1-
from typing import List, Optional
1+
from typing import List, Literal, Optional
22
from datetime import datetime
33
from pydantic import BaseModel
44

55
class PostCreate(BaseModel):
66
title: str
77
content: str
8+
type: Literal["disaster", "normal"]
89
region_id: int
910
post_imageURLs: List[str] = []
1011

1112
class Author(BaseModel):
1213
id: int
1314
username: str
1415
profile_imageURL: Optional[str] = None
16+
point: int
1517

1618
class PostRead(BaseModel):
1719
id: int
1820
user_id: int
1921
title: str
2022
content: str
23+
type: Literal["disaster", "normal"]
2124
region_id: int
2225
post_imageURLs: List[str] = []
2326
created_at: datetime
@@ -32,6 +35,7 @@ class PostRead(BaseModel):
3235
class PostUpdate(BaseModel):
3336
title: Optional[str] = None
3437
content: Optional[str] = None
38+
type: Optional[Literal["disaster", "normal"]] = None
3539
region_id: Optional[int] = None
3640
post_imageURLs: Optional[List[str]] = None
3741

app/schemas/user_schema.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ class PasswordUpdatePair(BaseModel):
3939

4040
class UserUpdate(BaseModel):
4141
username: Optional[str] = None
42-
profile_imageURL: Optional[HttpUrl] = None
4342
password: Optional[PasswordUpdatePair] = None
4443

4544
UserUpdateResponse = ApiResponse[None]

app/services/comment_service.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,11 @@
66

77
from app.models.comment_models import Comment
88
from app.models.post_model import Post
9+
from app.models.user_model import User
910
from app.schemas.comment_schemas import CommentCreate
1011

1112
# 댓글 생성
12-
def create_comment(session: Session, user_id: int, req: CommentCreate) -> Comment:
13+
def create_comment(session: Session, user: User, req: CommentCreate) -> Comment:
1314
post = session.get(Post, req.post_id)
1415
if not post:
1516
raise HTTPException(status_code=404, detail="게시글이 존재하지 않습니다.")
@@ -22,11 +23,13 @@ def create_comment(session: Session, user_id: int, req: CommentCreate) -> Commen
2223

2324
comment = Comment(
2425
post_id=req.post_id,
25-
user_id=user_id,
26+
user_id=user.id,
2627
parent_comment_id=req.parent_comment_id,
2728
content=req.content,
2829
last_modified=datetime.utcnow()
2930
)
31+
user.point += 2
32+
session.add(user)
3033
session.add(comment)
3134
session.commit()
3235
session.refresh(comment)

app/services/post_service.py

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ def _serialize_post(self, post: Post, author: Author) -> PostRead:
2020
user_id=post.user_id,
2121
title=post.title,
2222
content=post.content,
23+
type=post.type,
2324
region_id=post.region_id,
2425
post_imageURLs=post.post_imageURLs,
2526
created_at=post.created_at,
@@ -46,13 +47,19 @@ async def create_post(
4647
**post_data.dict(),
4748
user_id=user.id
4849
)
50+
if post.type == "disaster":
51+
user.point += 10
52+
elif post.type == "normal":
53+
user.point += 5
54+
self.session.add(user)
4955
self.session.add(post)
5056
self.session.commit()
5157
self.session.refresh(post)
5258
author = Author(
5359
id=user.id,
5460
username=user.username,
55-
profile_imageURL=user.profile_imageURL
61+
profile_imageURL=user.profile_imageURL,
62+
point=user.point
5663
)
5764
return self._serialize_post(post, author)
5865

@@ -105,7 +112,8 @@ async def update_post(
105112
author = Author(
106113
id=user.id,
107114
username=user.username,
108-
profile_imageURL=user.profile_imageURL
115+
profile_imageURL=user.profile_imageURL,
116+
point=user.point
109117
)
110118
return self._serialize_post(post, author)
111119

@@ -123,10 +131,12 @@ def delete_post(self, post_id: int, user: User):
123131
self.session.commit()
124132
return {"ok": True}
125133

126-
def list_posts(self, term: str = None, region_ids: list = None, sort: str = None):
134+
def list_posts(self, term: str = None, type: str = None, region_ids: list = None, sort: str = None):
127135
query = select(Post).options(selectinload(Post.user))
128136
if term:
129137
query = query.where(Post.title.contains(term) | Post.content.contains(term))
138+
if type:
139+
query = query.where(Post.type == type)
130140
if region_ids:
131141
query = query.where(Post.region_id.in_(region_ids))
132142
if sort == "latest":
@@ -140,7 +150,8 @@ def list_posts(self, term: str = None, region_ids: list = None, sort: str = None
140150
Author(
141151
id=post.user.id,
142152
username=post.user.username,
143-
profile_imageURL=post.user.profile_imageURL
153+
profile_imageURL=post.user.profile_imageURL,
154+
point=post.user.point
144155
)
145156
)
146157
for post in posts
@@ -151,7 +162,8 @@ def list_user_posts(self, user: User):
151162
author = Author(
152163
id=user.id,
153164
username=user.username,
154-
profile_imageURL=user.profile_imageURL
165+
profile_imageURL=user.profile_imageURL,
166+
point=user.point
155167
)
156168
return [self._serialize_post(post, author) for post in posts]
157169

@@ -168,6 +180,7 @@ def increment_view_count(self, post_id: int):
168180
author = Author(
169181
id=post.user.id,
170182
username=post.user.username,
171-
profile_imageURL=post.user.profile_imageURL
183+
profile_imageURL=post.user.profile_imageURL,
184+
point=post.user.point
172185
)
173186
return self._serialize_post(post, author)

app/services/sponsor_service.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ def delete_sponsor(self, sponsor_id: int) -> bool:
7171
def donate_to_sponsor(self, sponsor_id: int, amount: int, user: User) -> Sponsor:
7272
sponsor = self.get_sponsor(sponsor_id)
7373
sponsor.current_money += amount
74-
user.point += amount
74+
user.point += (amount // 1000) * 100
7575
self.session.add_all([sponsor, user])
7676
self.session.commit()
7777
self.session.refresh(sponsor)

0 commit comments

Comments
 (0)