Skip to content
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.konkuk.arabyte_aos.data.dataremote.datasource

import com.konkuk.arabyte_aos.data.dataremote.model.request.PostNoticeBoardWriteRequestDto
import com.konkuk.arabyte_aos.data.dataremote.model.response.GetNoticeBoardDetailResponseDto
import com.konkuk.arabyte_aos.data.dataremote.model.response.GetNoticeBoardListResponseDto
import retrofit2.Response
Expand All @@ -15,4 +16,8 @@ interface NoticeBoardRemoteDataSource {
suspend fun getNoticeBoardDetail(
articleId: Long,
): Response<GetNoticeBoardDetailResponseDto>

suspend fun postNoticeBoardWrite(
postNoticeBoardWriteRequestDto: PostNoticeBoardWriteRequestDto,
): Response<Unit>
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.konkuk.arabyte_aos.data.dataremote.datasourceimpl

import com.konkuk.arabyte_aos.data.dataremote.datasource.NoticeBoardRemoteDataSource
import com.konkuk.arabyte_aos.data.dataremote.model.request.PostNoticeBoardWriteRequestDto
import com.konkuk.arabyte_aos.data.dataremote.model.response.GetNoticeBoardDetailResponseDto
import com.konkuk.arabyte_aos.data.dataremote.model.response.GetNoticeBoardListResponseDto
import com.konkuk.arabyte_aos.data.dataremote.service.NoticeBoardService
Expand Down Expand Up @@ -29,4 +30,7 @@ class NoticeBoardRemoteDataSourceImpl
service.getNoticeBoardDetail(
articleId = articleId,
)

override suspend fun postNoticeBoardWrite(postNoticeBoardWriteRequestDto: PostNoticeBoardWriteRequestDto): Response<Unit> =
service.postNoticeBoardWrite(postNoticeBoardWriteRequestDto = postNoticeBoardWriteRequestDto)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.konkuk.arabyte_aos.data.dataremote.model.request

import kotlinx.serialization.Serializable

@Serializable
data class PostNoticeBoardWriteRequestDto(
val title: String,
val text: String,
val likeCount: Long,
val isAnonymous: Boolean,
val articleKind: String,
val articleImages: List<String>,
val anonymous: Boolean,
)

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
package com.konkuk.arabyte_aos.data.dataremote.service

import com.konkuk.arabyte_aos.data.dataremote.model.request.PostNoticeBoardWriteRequestDto
import com.konkuk.arabyte_aos.data.dataremote.model.response.GetNoticeBoardDetailResponseDto
import com.konkuk.arabyte_aos.data.dataremote.model.response.GetNoticeBoardListResponseDto
import com.konkuk.arabyte_aos.data.util.ApiConstraints.ARTICLES
import retrofit2.Response
import retrofit2.http.Body
import retrofit2.http.GET
import retrofit2.http.POST
import retrofit2.http.Path
import retrofit2.http.Query

Expand All @@ -21,4 +24,9 @@ interface NoticeBoardService {
suspend fun getNoticeBoardDetail(
@Path("articleId") articleId: Long,
): Response<GetNoticeBoardDetailResponseDto>

@POST("/$ARTICLES")
suspend fun postNoticeBoardWrite(
@Body postNoticeBoardWriteRequestDto: PostNoticeBoardWriteRequestDto,
): Response<Unit>
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.konkuk.arabyte_aos.data.mapper.todata

import com.konkuk.arabyte_aos.data.dataremote.model.request.PostNoticeBoardWriteRequestDto
import com.konkuk.arabyte_aos.domain.model.PostNoticeBoardWrite

fun PostNoticeBoardWrite.toRequestDto(): PostNoticeBoardWriteRequestDto {
return PostNoticeBoardWriteRequestDto(
title = this.title,
text = this.text,
likeCount = this.likeCount,
isAnonymous = this.isAnonymous,
articleKind = this.articleKind,
articleImages = this.articleImages,
anonymous = this.anonymous,
)
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package com.konkuk.arabyte_aos.data.repositoryimpl

import com.konkuk.arabyte_aos.data.dataremote.datasource.NoticeBoardRemoteDataSource
import com.konkuk.arabyte_aos.data.mapper.todata.toRequestDto
import com.konkuk.arabyte_aos.data.mapper.todomain.toDomainModel
import com.konkuk.arabyte_aos.domain.model.NoticeBoardDetail
import com.konkuk.arabyte_aos.domain.model.NoticeBoardList
import com.konkuk.arabyte_aos.domain.model.PostNoticeBoardWrite
import com.konkuk.arabyte_aos.domain.repository.NoticeBoardRepository
import javax.inject.Inject

Expand Down Expand Up @@ -35,4 +37,11 @@ class NoticeBoardRepositoryImpl
).body()?.toDomainModel()
?: throw IllegalStateException("Response body is null")
}

override suspend fun postNoticeBoardWrite(postNoticeBoardWrite: PostNoticeBoardWrite): Result<Unit> =
runCatching {
noticeBoardListRemoteDataSource.postNoticeBoardWrite(
postNoticeBoardWriteRequestDto = postNoticeBoardWrite.toRequestDto(),
)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.konkuk.arabyte_aos.domain.model

data class PostNoticeBoardWrite(
val title: String,
val text: String,
val likeCount: Long,
val isAnonymous: Boolean,
val articleKind: String,
val articleImages: List<String>,
val anonymous: Boolean,
)
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package com.konkuk.arabyte_aos.domain.repository

import com.konkuk.arabyte_aos.domain.model.NoticeBoardDetail
import com.konkuk.arabyte_aos.domain.model.NoticeBoardList
import com.konkuk.arabyte_aos.domain.model.PostNoticeBoardWrite

interface NoticeBoardRepository {
suspend fun getNoticeBoardList(
Expand All @@ -14,4 +15,8 @@ interface NoticeBoardRepository {
suspend fun getNoticeBoardDetail(
articleId: Long,
): Result<NoticeBoardDetail>

suspend fun postNoticeBoardWrite(
postNoticeBoardWrite: PostNoticeBoardWrite,
): Result<Unit>
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.konkuk.arabyte_aos.domain.usecase.noticeboard

import com.konkuk.arabyte_aos.domain.model.PostNoticeBoardWrite
import com.konkuk.arabyte_aos.domain.repository.NoticeBoardRepository
import javax.inject.Inject
import javax.inject.Singleton

@Singleton
class PostNoticeBoardWriteUseCase
@Inject
constructor(
private val noticeBoardRepository: NoticeBoardRepository,
) {
suspend operator fun invoke(
postNoticeBoardWrite: PostNoticeBoardWrite,
): Result<Unit> {
return noticeBoardRepository.postNoticeBoardWrite(
postNoticeBoardWrite = postNoticeBoardWrite,
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,9 @@ import com.konkuk.arabyte_aos.ui.theme.ArabyteTheme

@Composable
fun ArabyteTopAppBar(
modifier: Modifier = Modifier,
useBack: Boolean = true,
title: String? = null,
modifier: Modifier = Modifier,
onBackClick: () -> Unit = {},
) {
ArabyteTopAppBarInternal(
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
package com.konkuk.arabyte_aos.presentation.ui.component.chip

import androidx.annotation.StringRes
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.width
import androidx.compose.material3.Icon
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.res.vectorResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import com.konkuk.arabyte_aos.R
import com.konkuk.arabyte_aos.presentation.util.modifier.roundedBackgroundWithPadding
import com.konkuk.arabyte_aos.ui.theme.ArabyteAOSTheme
import com.konkuk.arabyte_aos.ui.theme.ArabyteTheme

@Composable
fun ArabyteInformationBox(
@StringRes infoResId: Int,
modifier: Modifier = Modifier,
) {
Row(
modifier =
modifier
.fillMaxWidth()
.roundedBackgroundWithPadding(
backgroundColor = ArabyteTheme.colors.lightBlue,
cornerRadius = 9.dp,
padding = PaddingValues(10.dp),
),
verticalAlignment = Alignment.CenterVertically,
) {
Icon(
imageVector = ImageVector.vectorResource(id = R.drawable.ic_all_information_14),
tint = Color.Unspecified,
contentDescription = null,
)
Spacer(Modifier.width(7.dp))
Text(
text = stringResource(infoResId),
style = ArabyteTheme.typography.capMed9,
color = ArabyteTheme.colors.mainBlue,
)
}
}

@Preview(showBackground = true)
@Composable
private fun ArabyteInformationBoxPrev() {
ArabyteAOSTheme {
ArabyteInformationBox(
infoResId = R.string.notice_board_write_anonymous_description,
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,11 +31,11 @@ import okhttp3.internal.immutableListOf

@Composable
fun ArabyteNormalTextField(
title: String,
errorMessageList: List<String> = immutableListOf("", "error message", "success message"),
textMaxLength: Int,
placeholder: String,
modifier: Modifier = Modifier,
errorMessageList: List<String> = immutableListOf("", "error message", "success message"),
title: String = "",
text: String = "",
validationState: TextFieldValidationState = TextFieldValidationState.IDLE,
visualTransformation: VisualTransformation = VisualTransformation.None,
Expand All @@ -51,8 +51,10 @@ fun ArabyteNormalTextField(
}

Column(modifier = modifier.fillMaxWidth()) {
Text(text = title, style = ArabyteTheme.typography.bodySemi15, color = ArabyteTheme.colors.black)
Spacer(modifier = Modifier.height(4.dp))
if (title.isNotEmpty()) {
Text(text = title, style = ArabyteTheme.typography.bodySemi15, color = ArabyteTheme.colors.black)
Spacer(modifier = Modifier.height(4.dp))
}
Row(
modifier =
Modifier
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import com.konkuk.arabyte_aos.presentation.ui.login.navigation.loginNavGraph
import com.konkuk.arabyte_aos.presentation.ui.mypage.navigation.myPageNavGraph
import com.konkuk.arabyte_aos.presentation.ui.noticeboard.navigation.noticeboardNavGraph
import com.konkuk.arabyte_aos.presentation.ui.noticeboarddetail.navigation.noticeBoarDetailNavGraph
import com.konkuk.arabyte_aos.presentation.ui.noticeboardwrite.navigation.noticeBoardWrite
import com.konkuk.arabyte_aos.presentation.ui.onboarding.navigation.onboardingNavGraph
import com.konkuk.arabyte_aos.presentation.ui.reviewdetail.navigation.reviewDetailNavGraph
import com.konkuk.arabyte_aos.presentation.ui.reviewlist.navigation.reviewListNavGraph
Expand Down Expand Up @@ -58,6 +59,7 @@ fun MainNavHost(
noticeboardNavGraph(
paddingValues = paddingValues,
navigateToNoticeBoardDetail = navigator::navigateToNoticeBoardDetail,
navigateToNoticeBoardWrite = navigator::navigateToNoticeBoardWrite,
)
noticeBoarDetailNavGraph(
paddingValues = paddingValues,
Expand All @@ -80,6 +82,11 @@ fun MainNavHost(
popBackStack = navigator::popBackStack,
navigateToReviewList = navigator::navigateToReviewList,
)
noticeBoardWrite(
paddingValues = paddingValues,
popBackStack = navigator::popBackStack,
navigateToNoticeBoardList = navigator::navigateToNoticeBoard,
)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import com.konkuk.arabyte_aos.presentation.ui.login.navigation.navigationLogin
import com.konkuk.arabyte_aos.presentation.ui.mypage.navigation.navigationMyPage
import com.konkuk.arabyte_aos.presentation.ui.noticeboard.navigation.navigationNoticeBoard
import com.konkuk.arabyte_aos.presentation.ui.noticeboarddetail.navigation.navigationNoticeBoardDetail
import com.konkuk.arabyte_aos.presentation.ui.noticeboardwrite.navigation.navigationNoticeBoardWrite
import com.konkuk.arabyte_aos.presentation.ui.onboarding.navigation.navigationOnboarding
import com.konkuk.arabyte_aos.presentation.ui.reviewdetail.navigation.navigationReviewDetail
import com.konkuk.arabyte_aos.presentation.ui.reviewlist.navigation.navigationReviewList
Expand Down Expand Up @@ -84,6 +85,10 @@ class MainNavigator(
navHostController.navigationReviewWrite()
}

fun navigateToNoticeBoardWrite() {
navHostController.navigationNoticeBoardWrite()
}

fun popBackStack() {
if (navHostController.previousBackStackEntry != null) {
navHostController.popBackStack()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ import com.konkuk.arabyte_aos.ui.theme.ArabyteTheme

@Composable
fun NoticeBoardListRoute(
navigateToNoticeBoardWrite: () -> Unit,
modifier: Modifier = Modifier,
navigateToNoticeBoardDetail: (articleId: Long) -> Unit = {},
viewModel: NoticeBoardListViewModel = hiltViewModel(),
Expand All @@ -65,7 +66,7 @@ fun NoticeBoardListRoute(

NoticeBoardListScreen(
categoryOnClick = { viewModel.setEvent(NoticeBoardListContract.NoticeBoardListUiEvent.SelectCategory(it)) },
addNoticeBoardButtonClicked = {},
addNoticeBoardButtonClicked = navigateToNoticeBoardWrite,
navigateToNoticeBoardDetail = { articleId -> viewModel.setSideEffect(NoticeBoardListContract.NoticeBoardListSideEffect.NavigateToNoticeBoardDetail(articleId = articleId)) },
modifier = modifier,
uiState = uiState,
Expand All @@ -75,9 +76,9 @@ fun NoticeBoardListRoute(

@Composable
fun NoticeBoardListScreen(
modifier: Modifier = Modifier,
categoryOnClick: (ArabyteNoticeBoardCategoryType) -> Unit,
addNoticeBoardButtonClicked: () -> Unit,
modifier: Modifier = Modifier,
navigateToNoticeBoardDetail: (articleId: Long) -> Unit = {},
uiState: NoticeBoardListContract.NoticeBoardListUiState = NoticeBoardListContract.NoticeBoardListUiState(),
innerPaddingValues: PaddingValues = PaddingValues(0.dp),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,15 @@ fun NavController.navigationNoticeBoard() {
fun NavGraphBuilder.noticeboardNavGraph(
paddingValues: PaddingValues,
navigateToNoticeBoardDetail: (articleId: Long) -> Unit,
navigateToNoticeBoardWrite: () -> Unit,
) {
composable(route = NoticeBoardRoute.ROUTE) {
NoticeBoardListRoute(
innerPaddingValues = paddingValues,
navigateToNoticeBoardDetail = { articleId ->
navigateToNoticeBoardDetail(articleId)
},
navigateToNoticeBoardWrite = navigateToNoticeBoardWrite,
)
}
}
Expand Down
Loading