Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
2b8ab86
Merge branch 'develop' of https://github.com/BCSDLab/KOIN_ANDROID int…
KYM-P Jan 22, 2026
60db1ed
feature: Change modify deleteImageIds field type to List<Int>
KYM-P Jan 23, 2026
d5db673
feature: Rename field in lostandfound modify request
KYM-P Jan 23, 2026
22d8f2d
feature: Add lostandfound modify
KYM-P Jan 23, 2026
bc8b04e
chore: Feat ktlint
KYM-P Jan 23, 2026
9d06fb4
Merge branch 'feature/lostandfound-base' of https://github.com/BCSDLa…
KYM-P Jan 23, 2026
5924a08
feature: Delete useless backStackEntry
KYM-P Jan 23, 2026
ebf8514
Merge branch 'feature/#1214-lostandfound-modifiy' of https://github.c…
KYM-P Jan 23, 2026
e276487
feature: Modifty only not found article
KYM-P Jan 23, 2026
9ed7cac
feature: LostAndFoundList can refresh
KYM-P Jan 23, 2026
85c3a3c
feature: Add LostAndFounWrite item delete option
KYM-P Jan 23, 2026
584a281
feature: Add koin://article/lost-item link to LostAndFoundActivity
KYM-P Jan 23, 2026
63ab5ab
feature: Navigate lostandfound by deeplink
KYM-P Jan 23, 2026
0e434ce
chore: Remake LostAndFoundFilterType
KYM-P Jan 23, 2026
7b9ec59
feature: Lambda to remember value
KYM-P Jan 23, 2026
ef9f26b
chore: Fix code formatting
KYM-P Jan 23, 2026
e157858
feature: Add image only image type content
KYM-P Jan 23, 2026
18fa947
Merge branch 'feature/#1214-lostandfound-modify' of https://github.co…
KYM-P Jan 23, 2026
a538fbc
feature: fetchLostAndFoundArticleV2
KYM-P Jan 23, 2026
88c5024
chore: Feat ktlint
KYM-P Jan 23, 2026
512fc5f
feature: Add entry log
KYM-P Jan 23, 2026
5e86723
feature: Add log
KYM-P Jan 23, 2026
2834aa6
Merge branch 'feature/#1214-lostandfound-modify' of https://github.co…
KYM-P Jan 23, 2026
eb3c4b1
feature: Add log modify
KYM-P Jan 23, 2026
c803aec
feature: Add not image message and type is nullable
KYM-P Jan 23, 2026
4f7a1bb
Merge branch 'feature/#1214-lostandfound-modify' of https://github.co…
KYM-P Jan 23, 2026
459bb2d
Merge branch 'feature/#1214-lostandfound-modify' of https://github.co…
KYM-P Jan 23, 2026
3702aad
Merge branch 'feature/#1214-lostandfound-modify' of https://github.co…
KYM-P Jan 23, 2026
284a7a3
chore: Feat ktlint
KYM-P Jan 23, 2026
257f523
chore: Feat ktlint
KYM-P Jan 23, 2026
bbd1d26
Merge branch 'feature/#1214-lostandfound-chore' of https://github.com…
KYM-P Jan 23, 2026
aff5ec1
chore: Feat ktlint
KYM-P Jan 23, 2026
56927a7
chore: Feat ktlint
KYM-P Jan 25, 2026
5dc539d
Merge branch 'feature/#1214-lostandfound-chore' of https://github.com…
KYM-P Jan 25, 2026
368640e
Merge branch 'feature/#1214-fetch-lostandfound-v2' of https://github.…
KYM-P Jan 25, 2026
2c474c9
Merge pull request #1244 from BCSDLab/feature/#1214-lostandfound-logging
KYM-P Jan 25, 2026
d6b7c7a
Merge pull request #1243 from BCSDLab/feature/#1214-fetch-lostandfoun…
KYM-P Jan 25, 2026
f16b972
feature: Detail show created date
KYM-P Jan 25, 2026
15d0101
Merge pull request #1242 from BCSDLab/feature/#1214-lostandfound-chore
KYM-P Jan 25, 2026
e56583d
feature: Delete useless lambda
KYM-P Jan 25, 2026
d9119a0
feature: First emit drop
KYM-P Jan 29, 2026
87b2cca
Revert "feature: First emit drop"
KYM-P Jan 29, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,15 @@ object AnalyticsConstant {
const val ITEM_MESSAGE_SEND = "item_message_send"
const val ITEM_POST_REPORT = "item_post_report"
const val ITEM_POST_TYPE = "item_post_type"
const val LOST_ITEM_FILTER = "lost_item_filter"
const val LOST_ITEM_FILTER_APPLY = "lost_item_filter_apply"
const val LOST_ITEM_POST_ENTRY = "lost_item_post_entry"
const val LOST_ITEM_MESSAGE_LOGIN_REQUEST = "lost_item_message_login_request"
const val LOST_ITEM_WRITE_LOGIN_REQUEST = "lost_item_write_login_request"
const val LOST_ITEM_STATE_CHANGE = "lost_item_state_change"
const val LOST_ITEM_FOUND = "lost_item_found"
const val LOST_ITEM_MODIFY = "lost_item_modify"
const val LOST_ITEM_MODIFY_COMPLETE = "lost_item_modify_complete"
}

object CHAT {
Expand Down
4 changes: 2 additions & 2 deletions data/src/main/java/in/koreatech/koin/data/api/ArticleApi.kt
Original file line number Diff line number Diff line change
Expand Up @@ -78,8 +78,8 @@ interface ArticleApi {
* 분실물 게시글 조회
* @param id 게시글 아이디
*/
@GET("articles/lost-item/{id}")
suspend fun fetchArticleLostAndFound(
@GET("articles/lost-item/v2/{id}")
suspend fun fetchArticleLostAndFoundV2(
@Path("id") id: Int
): ArticleLostAndFoundResponse

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -261,10 +261,10 @@ class ArticleRepositoryImpl @Inject constructor(
}
}

override fun fetchArticleLostAndFound(articleId: Int): Flow<ArticleLostAndFound> {
override fun fetchArticleLostAndFoundV2(articleId: Int): Flow<ArticleLostAndFound> {
return flow {
emit(
articleRemoteDataSource.fetchArticleLostAndFound(articleId).toArticleLostAndFound()
articleRemoteDataSource.fetchArticleLostAndFoundV2(articleId).toArticleLostAndFound()
)
}
}
Expand Down Expand Up @@ -326,7 +326,7 @@ class ArticleRepositoryImpl @Inject constructor(
foundDate: String,
content: String?,
newImage: List<String>?,
deleteImageIds: List<String>?
deleteImageIds: List<Int>?
): Result<Unit> {
return runCatching {
val response = articleRemoteDataSource.modifyArticleLostAndFound(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,6 @@ data class ArticleModifyRequest(
@SerializedName("found_place") val foundPlace: String,
@SerializedName("found_date") val foundDate: String,
@SerializedName("content") val content: String?,
@SerializedName("new_image") val newImage: List<String>?,
@SerializedName("delete_image_ids") val deleteImageIds: List<String>?
@SerializedName("new_images") val newImage: List<String>?,
@SerializedName("delete_image_ids") val deleteImageIds: List<Int>?
)
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ data class ArticleLostAndFoundResponse(
@SerializedName("found_date") val foundDate: String,
@SerializedName("content") val content: String?,
@SerializedName("author") val author: String,
@SerializedName("is_council") val isCouncil: Boolean?, // Set nullable because /articles/lost-item API doesn't have this field
@SerializedName("organization") val organization: ArticleLostAndFoundOrganizationResponse?,
@SerializedName("is_mine") val isMine: Boolean?, // Set nullable because /articles/lost-item API doesn't have this field
@SerializedName("is_reported") val isReported: Boolean,
@SerializedName("is_found") val isFound: Boolean,
Expand All @@ -34,6 +34,17 @@ data class ArticleLostAndFoundResponse(
)
}

data class ArticleLostAndFoundOrganizationResponse(
@SerializedName("name") val name: String,
@SerializedName("location") val location: String
) {
fun toArticleLostAndFoundOrganization() =
ArticleLostAndFound.ArticleLostAndFoundOrganization(
name = name,
location = location
)
}

fun toArticleLostAndFoundHeader() =
ArticleLostAndFoundHeader(
id = id,
Expand Down Expand Up @@ -65,7 +76,7 @@ data class ArticleLostAndFoundResponse(
foundDate = foundDate,
content = content,
author = author,
isCouncil = isCouncil!!, // Should not be null
organization = organization?.toArticleLostAndFoundOrganization(),
isMine = isMine!!, // Should not be null
isFound = isFound,
images = images?.map { it.toArticleLostAndFoundImage() },
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -111,8 +111,8 @@ class ArticleRemoteDataSource @Inject constructor(
return articleApi.fetchSearchedLostAndFoundArticles(query, page, limit)
}

suspend fun fetchArticleLostAndFound(articleId: Int): ArticleLostAndFoundResponse {
return articleApi.fetchArticleLostAndFound(articleId)
suspend fun fetchArticleLostAndFoundV2(articleId: Int): ArticleLostAndFoundResponse {
return articleApi.fetchArticleLostAndFoundV2(articleId)
}

suspend fun uploadArticleLostAndFound(articleLostAndFound: List<ArticleLostAndFoundUpload>): Result<ArticleLostAndFoundResponse> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ data class ArticleLostAndFound(
val foundDate: String,
val content: String?,
val author: String,
val isCouncil: Boolean,
val organization: ArticleLostAndFoundOrganization?,
val isMine: Boolean,
val isFound: Boolean,
val images: List<ArticleLostAndFoundImage>?,
Expand All @@ -20,4 +20,9 @@ data class ArticleLostAndFound(
val id: Int,
val imageUrl: String
)

data class ArticleLostAndFoundOrganization(
val name: String,
val location: String
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ interface ArticleRepository {
limit: Int
): Flow<ArticleLostAndFoundPagination>

fun fetchArticleLostAndFound(articleId: Int): Flow<ArticleLostAndFound>
fun fetchArticleLostAndFoundV2(articleId: Int): Flow<ArticleLostAndFound>

suspend fun uploadArticleLostAndFound(articleLostAndFoundList: List<ArticleLostAndFoundUpload>): Result<ArticleLostAndFound>

Expand All @@ -96,6 +96,6 @@ interface ArticleRepository {
foundDate: String,
content: String?,
newImage: List<String>?,
deleteImageIds: List<String>?
deleteImageIds: List<Int>?
): Result<Unit>
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ import `in`.koreatech.koin.domain.repository.ArticleRepository
import javax.inject.Inject
import kotlinx.coroutines.flow.Flow

class FetchLostAndFoundArticleUseCase @Inject constructor(
class FetchLostAndFoundArticleV2UseCase @Inject constructor(
private val articleRepository: ArticleRepository
) {
operator fun invoke(articleId: Int): Flow<ArticleLostAndFound> = articleRepository.fetchArticleLostAndFound(articleId)
operator fun invoke(articleId: Int): Flow<ArticleLostAndFound> = articleRepository.fetchArticleLostAndFoundV2(articleId)
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ class ModifyArticleLostAndFoundUseCase @Inject constructor(
foundDate: String,
content: String?,
newImage: List<String>?,
deleteImageIds: List<String>?
deleteImageIds: List<Int>?
): Result<Unit> {
return articleRepository.modifyArticleLostAndFound(
articleId,
Expand Down
5 changes: 0 additions & 5 deletions feature/article/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,6 @@
android:scheme="koin" />
</intent-filter>
</activity>

<activity
android:name=".LostAndFoundReportActivity"
android:exported="true"
android:windowSoftInputMode="adjustResize" />
</application>

</manifest>
16 changes: 14 additions & 2 deletions feature/lostandfound/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,20 @@
<application>
<activity
android:name=".ui.LostAndFoundActivity"
android:exported="false"
android:windowSoftInputMode="adjustResize" />
android:exported="true"
android:launchMode="singleTop"
android:windowSoftInputMode="adjustResize" >
<intent-filter>
<action android:name="android.intent.action.VIEW" />

<category android:name="android.intent.category.DEFAULT" />

<data
android:host="articles"
android:pathPrefix="/lost-item/activity"
android:scheme="koin" />
</intent-filter>
</activity>
</application>

</manifest>
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
package `in`.koreatech.koin.feature.lostandfound

const val DEEP_LINK_LOST_AND_FOUND_BASE = "koin://articles/lost-item/activity"
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package `in`.koreatech.koin.feature.lostandfound.ui.write.component
package `in`.koreatech.koin.feature.lostandfound.component

import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
Expand All @@ -18,12 +18,10 @@ import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import `in`.koreatech.koin.core.designsystem.theme.KoinTheme
import `in`.koreatech.koin.feature.lostandfound.R

object WriteArticleDoneButtonDefaults {
object EditArticleDoneButtonDefaults {
val windowInsets: WindowInsets
@Composable
get() = WindowInsets.systemBars.only(
Expand All @@ -32,9 +30,10 @@ object WriteArticleDoneButtonDefaults {
}

@Composable
fun WriteArticleDoneButton(
fun EditArticleDoneButton(
text: String,
modifier: Modifier = Modifier,
windowInsets: WindowInsets = WriteArticleDoneButtonDefaults.windowInsets,
windowInsets: WindowInsets = EditArticleDoneButtonDefaults.windowInsets,
onClick: () -> Unit = {}
) = Column(
modifier = modifier.windowInsetsPadding(windowInsets),
Expand Down Expand Up @@ -63,7 +62,7 @@ fun WriteArticleDoneButton(
) {
Text(
style = KoinTheme.typography.bold15,
text = stringResource(id = R.string.write_done)
text = text
)
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package `in`.koreatech.koin.feature.lostandfound.ui.write.component
package `in`.koreatech.koin.feature.lostandfound.component

import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.Arrangement
Expand All @@ -25,7 +25,7 @@ import `in`.koreatech.koin.feature.lostandfound.R
import `in`.koreatech.koin.feature.lostandfound.enums.LostOrFoundType

@Composable
fun WriteArticleHeader(
fun EditArticleHeader(
type: LostOrFoundType,
modifier: Modifier = Modifier
) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package `in`.koreatech.koin.feature.lostandfound.ui.write.component
package `in`.koreatech.koin.feature.lostandfound.component

import androidx.compose.animation.core.animateFloatAsState
import androidx.compose.foundation.Image
Expand Down Expand Up @@ -49,7 +49,7 @@ import `in`.koreatech.koin.feature.lostandfound.enums.LostOrFoundType
import java.time.LocalDate

@Composable
fun WriteArticleItemDetail(
fun EditArticleItemDetail(
modifier: Modifier = Modifier,
type: LostOrFoundType,
location: String,
Expand Down Expand Up @@ -364,7 +364,7 @@ fun WriteArticleItemDetail(

Spacer(modifier = Modifier.height(8.dp))

WriteArticleTextField(
EditArticleTextField(
value = location,
onValueChange = onLocationChange,
singleLine = true,
Expand Down Expand Up @@ -401,7 +401,7 @@ fun WriteArticleItemDetail(

Spacer(modifier = Modifier.height(8.dp))

WriteArticleTextField(
EditArticleTextField(
value = moreDescription,
onValueChange = {
if (moreDescription.length < DESCRIPTION_MAX_LENGTH) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package `in`.koreatech.koin.feature.lostandfound.ui.write.component
package `in`.koreatech.koin.feature.lostandfound.component

import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
Expand All @@ -21,12 +21,11 @@ import androidx.compose.ui.unit.dp
import `in`.koreatech.koin.core.designsystem.component.text.LeadingIconText
import `in`.koreatech.koin.core.designsystem.theme.KoinTheme
import `in`.koreatech.koin.feature.lostandfound.R
import `in`.koreatech.koin.feature.lostandfound.component.ItemTypeChip
import `in`.koreatech.koin.feature.lostandfound.enums.LostItemCategory
import kotlinx.collections.immutable.toImmutableList

@Composable
fun WriteArticleItemType(
fun EditArticleItemType(
selectedChipIndex: Int,
modifier: Modifier = Modifier,
itemTypeRequired: Boolean = false,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package `in`.koreatech.koin.feature.lostandfound.ui.write.component
package `in`.koreatech.koin.feature.lostandfound.component

import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.PaddingValues
Expand All @@ -12,7 +12,7 @@ import androidx.compose.ui.unit.dp
import `in`.koreatech.koin.core.designsystem.theme.KoinTheme

@Composable
fun WriteArticleTextField(
fun EditArticleTextField(
value: String,
hint: String,
modifier: Modifier = Modifier,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package `in`.koreatech.koin.feature.lostandfound.ui.write.component
package `in`.koreatech.koin.feature.lostandfound.component

import android.net.Uri
import androidx.compose.foundation.Image
Expand Down Expand Up @@ -49,7 +49,7 @@ import `in`.koreatech.koin.feature.lostandfound.R
import `in`.koreatech.koin.feature.lostandfound.enums.LostOrFoundType

@Composable
fun WriteArticleUploadImage(
fun EditArticleUploadImage(
type: LostOrFoundType,
uploadedImageCount: Int = 0,
imageList: List<String> = listOf(),
Expand Down Expand Up @@ -98,7 +98,7 @@ fun WriteArticleUploadImage(
horizontalArrangement = Arrangement.spacedBy(8.dp)
) {
itemsIndexed(imageList) { index, imageUrl ->
WriteArticleUploadImageThumbnail(
EditArticleUploadImageThumbnail(
index = index,
imageUrl = Uri.parse(imageUrl)
) {
Expand Down Expand Up @@ -138,7 +138,7 @@ fun WriteArticleUploadImage(
}

@Composable
fun WriteArticleUploadImageThumbnail(
fun EditArticleUploadImageThumbnail(
index: Int,
imageUrl: Uri,
modifier: Modifier = Modifier,
Expand Down
Loading