-
Notifications
You must be signed in to change notification settings - Fork 1
경험/문항/채팅 API 데이터 레이어 구현 #16
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
33 commits
Select commit
Hold shift + click to select a range
d2331f5
refactor: 채팅 상태 구조 리팩토링
ThirFir e9bead9
chore: 이름 변경 ChatApi -> ChattingApi
ThirFir 26b120b
feat: 채팅 조회 Response 클래스 정의
ThirFir 1ad416a
feat: 특정 질문에 대한 채팅 내역 조회 API 명세 선언
ThirFir ecf4898
feat: 채팅 내역 조회 API DataSource 정의
ThirFir 25cbc70
feat: RemoteDataSource 힐트 모듈 선언
ThirFir 7e44bb6
feat: 채팅 스트리밍 데이터 Response 정의
ThirFir 9d90696
feat: Network Hilt Module 수정
ThirFir ed058bf
fix: DataSource 구현 관계 추가
ThirFir aae1e3a
feat: 채팅 스트리밍 API 로직 설계
ThirFir 9bfea03
feat: 자기소개서 업데이트 API 로직 구현
ThirFir f99fb10
fix: 채팅 내역 조회 파라미터 수정
ThirFir 4e9480d
chore: 커스텀 runCatching inline 함수화
ThirFir 7959ce5
feat: 채팅 API 레포지토리 구조 구현
ThirFir 358f542
feat: 레포지토리 Hilt 모듈 정의
ThirFir e3021e0
feat: Question Api 선언
ThirFir 52e61e3
feat: QuestionAPI 메서드 선언
ThirFir 6fca813
feat: Question DataSource 정의
ThirFir 8695ca2
refactor: Question 모델에 자소서 프로퍼티 추가
ThirFir 8200874
feat: QuestionResponse 모델 변환 확장함수 추가
ThirFir ac53008
feat: QuestionRepository 선언
ThirFir 3420991
chore: QuestionDetail -> Question 네이밍 수정
ThirFir d6e0b93
fix: API 호출에 필요한 Request 파라미터 추가
ThirFir 57b8e54
feat: QuestionRepository 구현
ThirFir e53e3ca
feat: Experience 레트로핏 서비스 선언
ThirFir ce06e6d
refactor: 문항 생성 시 Response 다른 것과 통일
ThirFir 6295b10
feat: ExperienceAPI 메서드 구현
ThirFir 53228a9
feat: Experience DataSource 구현
ThirFir 0e9802a
feat: Experience Repository 구현
ThirFir 7abb69f
fix: 경험 수정 Request nullability 설정
ThirFir c3e30a8
feat: Time Format 변환 확장함수 구현
ThirFir 8740698
chore: 경험 모델 클래스 시간 타입 LocalDate로 수정
ThirFir cff3c9c
fix: ActivityScope -> ActivityRetainedScope
ThirFir File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
54 changes: 54 additions & 0 deletions
54
core/common/src/main/kotlin/com/useai/core/common/extensions/TimeExtensions.kt
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,54 @@ | ||
| package com.useai.core.common.extensions | ||
|
|
||
| import java.time.LocalDate | ||
| import java.time.LocalDateTime | ||
| import java.time.format.DateTimeFormatter | ||
| import java.time.format.DateTimeParseException | ||
|
|
||
| fun String?.toLocalDateTime(pattern: String = "yyyy-MM-dd'T'HH:mm:ss"): LocalDateTime? { | ||
| if (this.isNullOrBlank()) return null | ||
|
|
||
| return try { | ||
| val formatter = DateTimeFormatter.ofPattern(pattern) | ||
| LocalDateTime.parse(this, formatter) | ||
| } catch (e: DateTimeParseException) { | ||
| e.printStackTrace() | ||
| null | ||
| } | ||
| } | ||
|
|
||
| fun String?.toLocalDate(pattern: String = "yyyy-MM-dd"): LocalDate? { | ||
| if (this.isNullOrBlank()) return null | ||
|
|
||
| return try { | ||
| val formatter = DateTimeFormatter.ofPattern(pattern) | ||
| LocalDate.parse(this, formatter) | ||
| } catch (e: DateTimeParseException) { | ||
| e.printStackTrace() | ||
| null | ||
| } | ||
| } | ||
|
|
||
| fun LocalDateTime?.toFormattedString(pattern: String = "yyyy-MM-dd'T'HH:mm:ss"): String? { | ||
| if (this == null) return null | ||
|
|
||
| return try { | ||
| val formatter = DateTimeFormatter.ofPattern(pattern) | ||
| this.format(formatter) | ||
| } catch (e: Exception) { | ||
| e.printStackTrace() | ||
| null | ||
| } | ||
| } | ||
|
|
||
| fun LocalDate?.toFormattedString(pattern: String = "yyyy-MM-dd"): String? { | ||
| if (this == null) return null | ||
|
|
||
| return try { | ||
| val formatter = DateTimeFormatter.ofPattern(pattern) | ||
| this.format(formatter) | ||
| } catch (e: Exception) { | ||
| e.printStackTrace() | ||
| null | ||
| } | ||
| } |
36 changes: 36 additions & 0 deletions
36
core/data/src/main/kotlin/com/useai/core/data/di/RepositoryModule.kt
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,36 @@ | ||
| package com.useai.core.data.di | ||
|
|
||
| import com.useai.core.data.repository.ChattingRepository | ||
| import com.useai.core.data.repository.ChattingRepositoryImpl | ||
| import com.useai.core.data.repository.ExperienceRepository | ||
| import com.useai.core.data.repository.ExperienceRepositoryImpl | ||
| import com.useai.core.data.repository.QuestionRepository | ||
| import com.useai.core.data.repository.QuestionRepositoryImpl | ||
| import dagger.Binds | ||
| import dagger.Module | ||
| import dagger.hilt.InstallIn | ||
| import dagger.hilt.android.components.ActivityRetainedComponent | ||
| import dagger.hilt.android.scopes.ActivityRetainedScoped | ||
|
|
||
| @Module | ||
| @InstallIn(ActivityRetainedComponent::class) | ||
| internal interface RepositoryModule { | ||
|
|
||
| @Binds | ||
| @ActivityRetainedScoped | ||
| fun providesChattingRepository( | ||
| impl: ChattingRepositoryImpl | ||
| ) : ChattingRepository | ||
|
|
||
| @Binds | ||
| @ActivityRetainedScoped | ||
| fun providesQuestionRepository( | ||
| impl: QuestionRepositoryImpl | ||
| ) : QuestionRepository | ||
|
|
||
| @Binds | ||
| @ActivityRetainedScoped | ||
| fun providesExperienceRepository( | ||
| impl: ExperienceRepositoryImpl | ||
| ) : ExperienceRepository | ||
| } |
12 changes: 12 additions & 0 deletions
12
core/data/src/main/kotlin/com/useai/core/data/repository/ChattingRepository.kt
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,12 @@ | ||
| package com.useai.core.data.repository | ||
|
|
||
| import com.useai.core.model.chat.ChattingHistory | ||
| import com.useai.core.model.chat.ChattingStreaming | ||
| import kotlinx.coroutines.flow.Flow | ||
|
|
||
| interface ChattingRepository { | ||
|
|
||
| fun startChattingStream(questionId: String, sendingMessage: String): Flow<ChattingStreaming> | ||
| suspend fun getChatHistory(questionId: String): Result<ChattingHistory> | ||
| suspend fun updateLetter(chattingId: String, questionId: String, content: String): Result<Unit> | ||
| } | ||
50 changes: 50 additions & 0 deletions
50
core/data/src/main/kotlin/com/useai/core/data/repository/ChattingRepositoryImpl.kt
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,50 @@ | ||
| package com.useai.core.data.repository | ||
|
|
||
| import com.useai.core.model.chat.ChattingHistory | ||
| import com.useai.core.model.chat.ChattingStreaming | ||
| import com.useai.core.network.error.runCatchingWith | ||
| import com.useai.core.network.request.StartChattingStreamRequest | ||
| import com.useai.core.network.request.UpdateLetterRequest | ||
| import com.useai.core.network.response.toChattingHistory | ||
| import com.useai.core.network.response.toChattingStreaming | ||
| import com.useai.core.network.source.ChattingRemoteDataSource | ||
| import kotlinx.coroutines.flow.Flow | ||
| import kotlinx.coroutines.flow.map | ||
| import javax.inject.Inject | ||
|
|
||
| internal class ChattingRepositoryImpl @Inject constructor( | ||
| private val chattingRemoteDataSource: ChattingRemoteDataSource | ||
| ) : ChattingRepository { | ||
|
|
||
| override fun startChattingStream(questionId: String, sendingMessage: String): Flow<ChattingStreaming> { | ||
| return chattingRemoteDataSource.startChattingStream( | ||
| StartChattingStreamRequest( | ||
| sendingMessage = sendingMessage, | ||
| questionId = questionId, | ||
| experienceIds = listOf() | ||
| ) | ||
| ).map { it.toChattingStreaming() } | ||
| } | ||
|
|
||
| override suspend fun getChatHistory(questionId: String): Result<ChattingHistory> { | ||
| return runCatchingWith { | ||
| chattingRemoteDataSource.getChatHistory(questionId).toChattingHistory() | ||
| } | ||
| } | ||
|
|
||
| override suspend fun updateLetter( | ||
| chattingId: String, | ||
| questionId: String, | ||
| content: String | ||
| ): Result<Unit> { | ||
| return runCatchingWith { | ||
| chattingRemoteDataSource.updateLetter( | ||
| chattingId = chattingId, | ||
| request = UpdateLetterRequest( | ||
| questionId = questionId, | ||
| content = content | ||
| ) | ||
| ) | ||
| } | ||
| } | ||
| } |
16 changes: 16 additions & 0 deletions
16
core/data/src/main/kotlin/com/useai/core/data/repository/ExperienceRepository.kt
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,16 @@ | ||
| package com.useai.core.data.repository | ||
|
|
||
| import com.useai.core.model.experience.Experience | ||
| import com.useai.core.model.experience.ExperienceParam | ||
| import com.useai.core.model.experience.MatchingExperience | ||
| import com.useai.core.network.request.UpdateExperienceRequest | ||
|
|
||
| interface ExperienceRepository { | ||
|
|
||
| suspend fun createExperience(experience: ExperienceParam): Result<Experience> | ||
| suspend fun getExperiences(): Result<List<Experience>> | ||
| suspend fun getExperience(experienceId: String): Result<Experience> | ||
| suspend fun searchExperience(query: String): Result<List<MatchingExperience>> | ||
| suspend fun updateExperience(experienceId: String, request: UpdateExperienceRequest): Result<Experience> | ||
| suspend fun deleteExperience(experienceId: String): Result<Unit> | ||
| } |
68 changes: 68 additions & 0 deletions
68
core/data/src/main/kotlin/com/useai/core/data/repository/ExperienceRepositoryImpl.kt
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,68 @@ | ||
| package com.useai.core.data.repository | ||
|
|
||
| import com.useai.core.common.extensions.toFormattedString | ||
| import com.useai.core.model.experience.Experience | ||
| import com.useai.core.model.experience.ExperienceParam | ||
| import com.useai.core.model.experience.MatchingExperience | ||
| import com.useai.core.network.error.runCatchingWith | ||
| import com.useai.core.network.request.CreateExperienceRequest | ||
| import com.useai.core.network.request.UpdateExperienceRequest | ||
| import com.useai.core.network.response.toExperience | ||
| import com.useai.core.network.response.toMatchingExperience | ||
| import com.useai.core.network.source.ExperienceRemoteDataSource | ||
| import javax.inject.Inject | ||
|
|
||
| internal class ExperienceRepositoryImpl @Inject constructor( | ||
| private val experienceRemoteDataSource: ExperienceRemoteDataSource | ||
| ) : ExperienceRepository { | ||
|
|
||
| override suspend fun createExperience(experience: ExperienceParam): Result<Experience> { | ||
| return runCatchingWith { | ||
| experienceRemoteDataSource.createExperience( | ||
| CreateExperienceRequest( | ||
| category = experience.category, | ||
| date = experience.date.toFormattedString().orEmpty(), | ||
| experienceType = experience.experienceType, | ||
| situation = experience.situation, | ||
| task = experience.task, | ||
| action = experience.action, | ||
| result = experience.result, | ||
| title = experience.title | ||
| ) | ||
| ).toExperience() | ||
| } | ||
| } | ||
|
|
||
| override suspend fun getExperiences(): Result<List<Experience>> { | ||
| return runCatchingWith { | ||
| experienceRemoteDataSource.getExperiences().experiences.map { it.toExperience() } | ||
| } | ||
| } | ||
|
|
||
| override suspend fun getExperience(experienceId: String): Result<Experience> { | ||
| return runCatchingWith { | ||
| experienceRemoteDataSource.getExperience(experienceId).toExperience() | ||
| } | ||
| } | ||
|
|
||
| override suspend fun searchExperience(query: String): Result<List<MatchingExperience>> { | ||
| return runCatchingWith { | ||
| experienceRemoteDataSource.searchExperience(query).results.map { it.toMatchingExperience() } | ||
| } | ||
| } | ||
|
|
||
| override suspend fun updateExperience( | ||
| experienceId: String, | ||
| request: UpdateExperienceRequest | ||
| ): Result<Experience> { | ||
| return runCatchingWith { | ||
| experienceRemoteDataSource.updateExperience(experienceId, request).toExperience() | ||
| } | ||
| } | ||
|
|
||
| override suspend fun deleteExperience(experienceId: String): Result<Unit> { | ||
| return runCatchingWith { | ||
| experienceRemoteDataSource.deleteExperience(experienceId) | ||
| } | ||
| } | ||
| } |
12 changes: 12 additions & 0 deletions
12
core/data/src/main/kotlin/com/useai/core/data/repository/QuestionRepository.kt
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,12 @@ | ||
| package com.useai.core.data.repository | ||
|
|
||
| import com.useai.core.model.chat.Question | ||
|
|
||
| interface QuestionRepository { | ||
|
|
||
| suspend fun createQuestion(projectId: String, question: Question): Result<String> | ||
| suspend fun getQuestions(projectId: String): Result<List<Question>> | ||
| suspend fun getQuestion(projectId: String, questionId: String): Result<Question> | ||
| suspend fun updateQuestion(projectId: String, question: Question): Result<Question> | ||
| suspend fun deleteQuestion(projectId: String, questionId: String): Result<Unit> | ||
| } |
58 changes: 58 additions & 0 deletions
58
core/data/src/main/kotlin/com/useai/core/data/repository/QuestionRepositoryImpl.kt
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,58 @@ | ||
| package com.useai.core.data.repository | ||
|
|
||
| import com.useai.core.model.chat.Question | ||
| import com.useai.core.network.error.runCatchingWith | ||
| import com.useai.core.network.request.CreateQuestionRequest | ||
| import com.useai.core.network.request.UpdateQuestionRequest | ||
| import com.useai.core.network.response.toQuestion | ||
| import com.useai.core.network.source.QuestionRemoteDataSource | ||
| import javax.inject.Inject | ||
|
|
||
| internal class QuestionRepositoryImpl @Inject constructor( | ||
| private val questionRemoteDataSource: QuestionRemoteDataSource | ||
| ) : QuestionRepository { | ||
|
|
||
| override suspend fun createQuestion(projectId: String, question: Question): Result<String> { | ||
| return runCatchingWith { | ||
| questionRemoteDataSource.createQuestion( | ||
| projectId, | ||
| CreateQuestionRequest( | ||
| title = question.title, | ||
| maxLength = question.maxLength | ||
| ) | ||
| ).id | ||
| } | ||
| } | ||
|
|
||
| override suspend fun getQuestions(projectId: String): Result<List<Question>> { | ||
| return runCatchingWith { | ||
| questionRemoteDataSource.getQuestions(projectId).map { it.toQuestion() } | ||
| } | ||
| } | ||
|
|
||
| override suspend fun getQuestion(projectId: String, questionId: String): Result<Question> { | ||
| return runCatchingWith { | ||
| questionRemoteDataSource.getQuestion(projectId, questionId).toQuestion() | ||
| } | ||
| } | ||
|
|
||
| override suspend fun updateQuestion(projectId: String, question: Question): Result<Question> { | ||
| return runCatchingWith { | ||
| questionRemoteDataSource.updateQuestion( | ||
| projectId, | ||
| question.id, | ||
| UpdateQuestionRequest( | ||
| title = question.title, | ||
| maxLength = question.maxLength, | ||
| letter = question.letter | ||
| ) | ||
| ).toQuestion() | ||
| } | ||
| } | ||
|
|
||
| override suspend fun deleteQuestion(projectId: String, questionId: String): Result<Unit> { | ||
| return runCatchingWith { | ||
| questionRemoteDataSource.deleteQuestion(projectId, questionId) | ||
| } | ||
| } | ||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
16 changes: 16 additions & 0 deletions
16
core/model/src/main/kotlin/com/useai/core/model/experience/Experience.kt
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,16 @@ | ||
| package com.useai.core.model.experience | ||
|
|
||
| import java.time.LocalDate | ||
|
|
||
| data class Experience( | ||
| val id: String, | ||
| val tags: List<String>, | ||
| val situation: String, | ||
| val task: String, | ||
| val action: String, | ||
| val result: String, | ||
| val category: ExperienceCategory, | ||
| val date: LocalDate, | ||
| val experienceType: String, | ||
| val title: String | ||
| ) |
22 changes: 22 additions & 0 deletions
22
core/model/src/main/kotlin/com/useai/core/model/experience/ExperienceCategory.kt
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,22 @@ | ||
| package com.useai.core.model.experience | ||
|
|
||
| /** | ||
| * @property PROACTIVE_EXECUTION 주도적 실행력 | ||
| * @property TECHNICAL_EXPERTISE 기술적 전문성 | ||
| * @property LOGICAL_ANALYSIS 논리적 분석력 | ||
| * @property CREATIVE_PROBLEM_SOLVING 창의적 문제해결 | ||
| * @property COLLABORATIVE_COMMUNICATION 협업적 소통 | ||
| * @property TENACIOUS_RESPONSIBILITY 끈기 있는 책임감 | ||
| * @property FLEXIBLE_ADAPTABILITY 유연한 적응력 | ||
| * @property CUSTOMER_VALUE_ORIENTATION 고객 가치 지향 | ||
| */ | ||
| enum class ExperienceCategory { | ||
| PROACTIVE_EXECUTION, | ||
| TECHNICAL_EXPERTISE, | ||
| LOGICAL_ANALYSIS, | ||
| CREATIVE_PROBLEM_SOLVING, | ||
| COLLABORATIVE_COMMUNICATION, | ||
| TENACIOUS_RESPONSIBILITY, | ||
| FLEXIBLE_ADAPTABILITY, | ||
| CUSTOMER_VALUE_ORIENTATION | ||
| } |
14 changes: 14 additions & 0 deletions
14
core/model/src/main/kotlin/com/useai/core/model/experience/ExperienceParam.kt
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,14 @@ | ||
| package com.useai.core.model.experience | ||
|
|
||
| import java.time.LocalDate | ||
|
|
||
| data class ExperienceParam( | ||
| val situation: String, | ||
| val task: String, | ||
| val action: String, | ||
| val result: String, | ||
| val category: String, | ||
| val date: LocalDate, | ||
| val experienceType: String, | ||
| val title: String | ||
| ) |
6 changes: 6 additions & 0 deletions
6
core/model/src/main/kotlin/com/useai/core/model/experience/MatchingExperience.kt
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,6 @@ | ||
| package com.useai.core.model.experience | ||
|
|
||
| data class MatchingExperience( | ||
| val experience: Experience, | ||
| val score: Float | ||
| ) |
9 changes: 9 additions & 0 deletions
9
core/network/src/main/kotlin/com/useai/core/network/ChattingEventSourceFactory.kt
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,9 @@ | ||
| package com.useai.core.network | ||
|
|
||
| import com.launchdarkly.eventsource.background.BackgroundEventHandler | ||
| import com.launchdarkly.eventsource.background.BackgroundEventSource | ||
| import com.useai.core.network.request.StartChattingStreamRequest | ||
|
|
||
| internal fun interface ChattingEventSourceFactory { | ||
| fun create(handler: BackgroundEventHandler, request: StartChattingStreamRequest): BackgroundEventSource | ||
| } |
3 changes: 0 additions & 3 deletions
3
core/network/src/main/kotlin/com/useai/core/network/api/ChatApi.kt
This file was deleted.
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
혹시 이게 자소서 업데이트하는 함수라면 updatePaper로 이름 지으면 어떨까요?
왜냐하면 Figma에서 자소서 아이콘 이름이 paper라서.. ㅎㅎ
아니면 아예 cover letter라고 표현하는 것도 괜찮을 것 같습니다
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이게 백엔드에서는 Draft로 표현하는거 같더라구요 ...
일단 다같이 얘기를 해봐야할듯 합니다 !!