Skip to content

Commit b448370

Browse files
authored
Merge pull request #604 from Junanjunan/fix/error
[fix] 파일 업로드 에러 / 쪽지 전송 에러 및 UX 개선 / QA 메일 템플릿 적용
2 parents 670ecea + b83cd62 commit b448370

File tree

7 files changed

+58
-10
lines changed

7 files changed

+58
-10
lines changed

api/v1/routers/memo.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -95,12 +95,14 @@ async def send_memo(
9595
- **me_memo**: 쪽지 내용
9696
"""
9797
# 발송 대상 회원에게 쪽지 발송
98+
send_point = point_service.get_config_point("cf_memo_send_point")
99+
98100
for target in data.members:
99101
memo = service.send_memo(member, target, data.me_memo)
100102
service.update_memo_call(member, target)
101103
# 포인트 소진
102104
point_service.save_point(
103-
member.mb_id, data.point * (-1),
105+
member.mb_id, send_point * (-1),
104106
f"{target.mb_nick}({target.mb_id})님에게 쪽지 발송", "@memo",
105107
target.mb_id, memo.me_id)
106108

bbs/memo.py

+6-3
Original file line numberDiff line numberDiff line change
@@ -93,16 +93,19 @@ async def memo_form(
9393
request: Request,
9494
member_service: Annotated[MemberService, Depends()],
9595
memo_service: Annotated[MemoService, Depends()],
96-
me_id: int = Query(default=None)
96+
me_id: int = Query(default=None),
97+
me_recv_mb_id: str = Query(default=None),
9798
):
9899
"""
99100
쪽지 작성 페이지
100101
"""
101102
# 답장할 쪽지 & 회원 정보 조회
102103
target = None
103104
memo = memo_service.fetch_memo(me_id)
104-
if memo:
105+
if me_id and memo:
105106
target = member_service.read_member(memo.me_send_mb_id)
107+
elif me_recv_mb_id:
108+
target = member_service.fetch_member_by_id(me_recv_mb_id)
106109

107110
context = {
108111
"request": request,
@@ -128,7 +131,7 @@ async def memo_form_update(
128131
# me_recv_mb_id 공백 제거
129132
mb_id_list = me_recv_mb_id.replace(" ", "").split(',')
130133
send_members = memo_service.get_receive_members(mb_id_list)
131-
send_point = memo_service.calculate_send_point(member, len(send_members))
134+
send_point = point_service.get_config_point("cf_memo_send_point")
132135

133136
# 쪽지 전송 처리
134137
for target in send_members:

lib/mail.py

+11-2
Original file line numberDiff line numberDiff line change
@@ -214,8 +214,6 @@ async def send_qa_mail(request: Request, qa: QaContent) -> None:
214214
Args:
215215
request (Request): Request 객체
216216
poll_etc (PollEtc): 기타의견 객체
217-
218-
TODO : 메일 발송 템플릿 적용이 필요하다.
219217
"""
220218
with DBConnect().sessionLocal() as db:
221219
request.state.config = config = db.query(Config).first()
@@ -225,11 +223,22 @@ async def send_qa_mail(request: Request, qa: QaContent) -> None:
225223
from_name = get_admin_email_name(request)
226224
subject = f"[{config.cf_title}] {qa_config.qa_title} 질문 알림 메일"
227225
content = qa.qa_subject + "<br><br>" + qa.qa_content
226+
templates = Jinja2Templates(
227+
directory=TemplateService.get_templates_dir())
228228

229229
if qa.qa_parent:
230230
question = db.get(QaContent, qa.qa_parent)
231231
if question.qa_email_recv and question.qa_email:
232232
subject = f"{subject} 에 대한 답변이 등록되었습니다."
233+
content = templates.TemplateResponse(
234+
"bbs/mail_form/qa_answered_mail.html", {
235+
"request": request,
236+
"qa_subject": qa.qa_subject,
237+
"qa_name": qa.qa_name,
238+
"qa_content": qa.qa_content,
239+
"link_url": request.url_for("qa_view", qa_id=qa.qa_parent),
240+
}
241+
).body.decode("utf-8")
233242
mailer(from_email, question.qa_email, subject, content, from_name)
234243
else:
235244
if qa_config.qa_admin_email:

service/board/board.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,7 @@ def upload_files(
281281
for file in file_list:
282282
index = file_list.index(file)
283283

284-
if file.filename:
284+
if file and file.filename:
285285
# 관리자가 아니면서 설정한 업로드 사이즈보다 크거나 업로드 가능 확장자가 아니면 업로드하지 않음
286286
if not self.member.admin_type:
287287
if not file_service.is_upload_size(self.board, file):

service/memo_service.py

+5-2
Original file line numberDiff line numberDiff line change
@@ -172,10 +172,13 @@ def calculate_send_point(self, member: Member, count: int) -> int:
172172
"""쪽지 전송에 필요한 포인트를 계산합니다."""
173173
send_point = getattr(self.config, "cf_memo_send_point", "0")
174174
total_use_point = int(send_point) * count
175+
mb_point = int(member.mb_point)
175176
if total_use_point > 0:
176-
if int(member.mb_point) < total_use_point:
177+
if mb_point < total_use_point:
177178
self.raise_exception(
178-
status_code=403, detail=f"보유하신 포인트({member.mb_point})가 부족합니다.")
179+
status_code=403,
180+
detail=f"{total_use_point-mb_point} 포인트가 부족합니다. (보유 포인트: {member.mb_point}, 필요 포인트: {total_use_point})"
181+
)
179182

180183
return total_use_point
181184

service/point_service.py

+7-1
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,12 @@ def save_point(self, mb_id: str, point: int, content: str = "",
117117
# 회원 포인트 갱신
118118
self.member_service.update_member_point(mb_id, po_mb_point)
119119

120+
def get_config_point(self, cf_name: str) -> int:
121+
"""
122+
설정된 포인트 값을 가져옵니다.
123+
"""
124+
return getattr(self.config, cf_name, 0)
125+
120126
def get_total_point(self, mb_id: str) -> int:
121127
"""
122128
회원의 포인트 총합
@@ -387,4 +393,4 @@ def _update_expired_points(self, mb_id: str) -> None:
387393
)
388394
self.db.commit()
389395

390-
return None
396+
return None
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<!doctype html>
2+
<html lang="ko">
3+
<head>
4+
<meta charset="utf-8">
5+
<title>{{ qa_subject }} 알림 메일</title>
6+
</head>
7+
<body>
8+
<div style="margin:30px auto;width:600px;border:10px solid #f7f7f7">
9+
<div style="border:1px solid #dedede">
10+
{% if qa_subject %}
11+
<h1 style="padding:30px 30px 0;background:#f7f7f7;color:#555;font-size:1.4em">
12+
{{ qa_subject }}
13+
</h1>
14+
{% endif %}
15+
<span style="display:block;padding:10px 30px 30px;background:#f7f7f7;text-align:right">
16+
작성자 : {{ qa_name }}
17+
</span>
18+
<div style="margin:20px 0 0;padding:30px 30px 50px;min-height:200px;height:auto !important;height:200px;border-bottom:1px solid #eee">
19+
{{ qa_content }}
20+
</div>
21+
<a href="{{ link_url }}" style="display:block;padding:30px 0;background:#484848;color:#fff;text-decoration:none;text-align:center">사이트에서 확인하기</a>
22+
</div>
23+
</div>
24+
</body>
25+
</html>

0 commit comments

Comments
 (0)