Skip to content

Commit af4b71d

Browse files
authored
Merge pull request #25 from MoDeep11/image_generate_api_finished
Image generate api finished
2 parents 717db06 + f7c3e54 commit af4b71d

File tree

4 files changed

+29
-17
lines changed

4 files changed

+29
-17
lines changed

ai/image/image_generator.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
from boto3 import client
1919
import io
2020
from PIL import Image
21-
import uuid
2221

2322
dotenv.load_dotenv() # .env 파일에서 환경 변수 로드
2423
AWS_ACCESS_KEY = os.getenv("AWS_ACCESS_KEY")
@@ -83,6 +82,7 @@ class ImageGenerationRequest(BaseModel):
8382
userId: int
8483
emotion: str
8584
content: str
85+
taskId: str
8686

8787

8888
class ImageGenerator:
@@ -132,12 +132,10 @@ async def generate(self, request: ImageGenerationRequest) -> dict:
132132
),
133133
)
134134
os.makedirs(TEMP_DIR, exist_ok=True)
135-
id1 = uuid.uuid4()
136-
id2 = uuid.uuid4()
137-
local_file = os.path.join(TEMP_DIR, f"generated_image_{id1}_{id2}.png")
135+
local_file = os.path.join(TEMP_DIR, f"generated_image_{request.taskId}.png")
138136
await save_image(response, local_file)
139137

140-
s3_key = f"ai-gen/images/diary_{id1}_{id2}.png"
138+
s3_key = f"ai-gen/images/{request.taskId}.png"
141139
s3_url = await s3_uploader.upload_file(local_file, s3_key)
142140
image_urls = [s3_url]
143141

ai/image/sticker_generator.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ class StickerGenerationRequest(BaseModel):
5555
diaryId: int
5656
emotion: str
5757
content: str
58+
taskId: str
5859

5960

6061
class StickerGenerator:
@@ -123,19 +124,22 @@ async def generate(self, request: StickerGenerationRequest) -> dict:
123124
)
124125

125126
os.makedirs(TEMP_DIR, exist_ok=True)
126-
local_file = os.path.join(TEMP_DIR, f"generated_sticker_{request.diaryId}_{request.userId}_1.png")
127+
local_file = os.path.join(TEMP_DIR, f"generated_sticker_{request.taskId}.png")
127128
await save_image(image_response, local_file)
128129

129130
image_text_parts = [part.text for part in image_response.parts if part.text]
130131
description = " ".join(image_text_parts)
131132

132-
s3_key = f"ai-gen/stickers/sticker_{request.diaryId}_{request.userId}_1.png"
133+
s3_key = f"ai-gen/stickers/{request.taskId}.png"
133134
s3_url = await s3_uploader.upload_file(local_file, s3_key)
134135

136+
# S3 업로드 후 로컬 파일 삭제
137+
if os.path.exists(local_file):
138+
os.remove(local_file)
139+
135140
stickers = [{
136141
"imageUrl": s3_url,
137142
"keyword": description,
138-
"localPath": local_file,
139143
}]
140144

141145
return {

server/app/router/diary_router.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ async def generate_sticker(request: StickerGenerateRequest, background_tasks: Ba
159159
- content: 일기 내용
160160
- count: 생성할 스티커 개수 (기본: 1, 최대: 5)
161161
"""
162-
task_id = f"sticker_task_{request.diaryId}_{request.userId}"
162+
task_id = str(uuid.uuid4())
163163

164164
# 백그라운드 작업으로 실행
165165
background_tasks.add_task(
@@ -194,7 +194,7 @@ async def generate_image(request: ImageGenerateRequest, background_tasks: Backgr
194194
- emotion: 감정 (HAPPY, SAD, ANGRY, ANXIOUS, NORMAL)
195195
- content: 일기 내용
196196
"""
197-
task_id = f"image_task_{request.diaryId}_{request.userId}"
197+
task_id = str(uuid.uuid4())
198198

199199
background_tasks.add_task(
200200
process_image_generation,
@@ -231,7 +231,7 @@ async def process_sticker_generation(
231231
"""스티커 생성 백그라운드 작업"""
232232
print(f"[Router] process_sticker_generation started (task_id={task_id})")
233233
try:
234-
result = await diary_service.generate_stickers(user_id, diary_id, emotion, content)
234+
result = await diary_service.generate_stickers(user_id, diary_id, emotion, content, task_id)
235235
print(f"[Router] generate_stickers result: {result}")
236236
# 스티커 생성이 완료되면 Spring 서버에 콜백
237237
print(f"[Router] calling patch_sticker_callback for task_id={task_id}")
@@ -276,7 +276,7 @@ async def process_image_generation(
276276
"""이미지 생성 백그라운드 작업"""
277277
print(f"[Router] process_image_generation started (task_id={task_id})")
278278
try:
279-
result = await diary_service.generate_image(user_id, diary_id, emotion, content)
279+
result = await diary_service.generate_image(user_id, diary_id, emotion, content, task_id)
280280
print(f"[Router] generate_image result: {result}")
281281
# 이미지 생성이 완료되면 Spring 서버에 콜백
282282
print(f"[Router] calling patch_image_callback for task_id={task_id}")

server/app/service/diary_service.py

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -130,23 +130,25 @@ async def create_diary(self, user_info, history, user_audio_urls=None, ai_audio_
130130
"tags": []
131131
}
132132

133-
async def generate_image(self, user_id: int, diary_id: int, emotion: str, content: str) -> Dict:
133+
async def generate_image(self, user_id: int, diary_id: int, emotion: str, content: str, task_id: str) -> Dict:
134134
"""이미지 생성"""
135135
request = ImageGenerationRequest(
136136
diaryId=diary_id,
137137
userId=user_id,
138138
emotion=emotion,
139139
content=content,
140+
taskId=task_id,
140141
)
141142
return await image_generator.generate(request)
142143

143-
async def generate_stickers(self, user_id: int, diary_id: int, emotion: str, content: str) -> Dict:
144+
async def generate_stickers(self, user_id: int, diary_id: int, emotion: str, content: str, task_id: str) -> Dict:
144145
"""스티커 생성"""
145146
request = StickerGenerationRequest(
146147
userId=user_id,
147148
diaryId=diary_id,
148149
emotion=emotion,
149150
content=content,
151+
taskId=task_id,
150152
)
151153
return await sticker_generator.generate(request)
152154

@@ -191,12 +193,20 @@ async def patch_image_callback(self, diary_id: int, task_id: str, user_id: int,
191193

192194
async def patch_sticker_callback(self, diary_id: int, task_id: str, user_id: int, stickers: list):
193195
"""Spring 백엔드에 스티커 생성 완료를 알리는 콜백"""
194-
url = f"{self.backend_url}/internal/diary/{diary_id}/ai-image"
196+
url = f"{self.backend_url}/internal/v1/stickers"
197+
if stickers:
198+
image_url = stickers[0]["imageUrl"]
199+
keyword = stickers[0]["keyword"]
200+
else:
201+
image_url = ""
202+
keyword = ""
195203
payload = {
196-
"diaryId": diary_id,
197204
"taskId": task_id,
198205
"userId": user_id,
199-
"stickers": stickers,
206+
"diaryId": diary_id,
207+
"status": "success",
208+
"imageUrl": image_url,
209+
"keyword": keyword,
200210
}
201211

202212
# 비동기 흐름 확인용 로그

0 commit comments

Comments
 (0)