Skip to content

Commit 2893bc1

Browse files
committed
Remove :domain module
1 parent f0cf286 commit 2893bc1

File tree

23 files changed

+173
-122
lines changed

23 files changed

+173
-122
lines changed

β€Žcore/datetime/src/main/java/soup/movie/datetime/DateHelper.ktβ€Ž

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import java.time.LocalDate
2020
import java.time.LocalDateTime
2121
import java.time.ZoneId
2222
import java.time.format.DateTimeFormatter
23+
import java.time.temporal.ChronoUnit
2324

2425
private val ZONE_SEOUL = ZoneId.of("Asia/Seoul")
2526
fun currentTime(): LocalDateTime = LocalDateTime.now(ZONE_SEOUL)
@@ -52,3 +53,20 @@ fun LocalDate.MM_DD(): String {
5253
fun LocalDate.YYYY_MM_DD(): String {
5354
return format(DateTimeFormatter.ofPattern("yyyy.MM.dd"))
5455
}
56+
57+
fun calculateDDay(openDate: LocalDate?, today: LocalDate): Long? {
58+
return openDate?.let {
59+
ChronoUnit.DAYS.between(today, it)
60+
}
61+
}
62+
63+
/**
64+
* Valid format: YYYY.MM.DD
65+
*/
66+
fun String.toLocalDate(): LocalDate? = split(".").let {
67+
return if (it.size == 3) {
68+
LocalDate.of(it[0].toInt(), it[1].toInt(), it[2].toInt())
69+
} else {
70+
null
71+
}
72+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
/*
2+
* Copyright 2021 SOUP
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package soup.movie.resources
17+
18+
fun dDayStringResource(dDay: Long): String {
19+
return when {
20+
dDay <= 0 -> "NOW"
21+
else -> "D-$dDay"
22+
}
23+
}

β€Ždata/database/impl/build.gradleβ€Ž

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ android {
2121
dependencies {
2222
implementation projects.core.kotlin
2323
implementation projects.core.logger
24+
implementation projects.core.datetime
2425
implementation projects.data.model
2526
implementation projects.data.database.api
2627

β€Ždata/database/impl/src/main/java/soup/movie/data/database/impl/LocalDataSourceImpl.ktβ€Ž

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import soup.movie.data.database.impl.mapper.toMovie
3131
import soup.movie.data.database.impl.mapper.toMovieEntity
3232
import soup.movie.data.database.impl.mapper.toOpenDateAlarm
3333
import soup.movie.data.database.impl.mapper.toOpenDateAlarmEntity
34+
import soup.movie.datetime.today
3435
import soup.movie.log.Logger
3536
import soup.movie.model.MovieListModel
3637
import soup.movie.model.MovieModel
@@ -73,8 +74,9 @@ class LocalDataSourceImpl @Inject constructor(
7374
}
7475

7576
private fun getMovieListFlow(type: String): Flow<List<MovieModel>> {
77+
val today = today()
7678
return cacheDao.getMovieListByType(type)
77-
.map { it.list.map { movieEntity -> movieEntity.toMovie() } }
79+
.map { it.list.map { movieEntity -> movieEntity.toMovie(today = today) } }
7880
.catch { emit(emptyList()) }
7981
}
8082

@@ -100,8 +102,9 @@ class LocalDataSourceImpl @Inject constructor(
100102

101103
private suspend fun getMovieListOf(type: String): List<MovieModel> {
102104
return try {
105+
val today = today()
103106
cacheDao.findByType(type).list
104-
.map { movieEntity -> movieEntity.toMovie() }
107+
.map { movieEntity -> movieEntity.toMovie(today = today) }
105108
} catch (t: Throwable) {
106109
Logger.w(t)
107110
emptyList()
@@ -118,8 +121,9 @@ class LocalDataSourceImpl @Inject constructor(
118121
}
119122

120123
override fun getFavoriteMovieList(): Flow<List<MovieModel>> {
124+
val today = today()
121125
return favoriteMovieDao.getFavoriteMovieList().map {
122-
it.map { favoriteMovieEntity -> favoriteMovieEntity.toMovie() }
126+
it.map { favoriteMovieEntity -> favoriteMovieEntity.toMovie(today = today) }
123127
}
124128
}
125129

β€Ždata/database/impl/src/main/java/soup/movie/data/database/impl/mapper/EntityToModelMapper.ktβ€Ž

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,34 @@ package soup.movie.data.database.impl.mapper
1818
import soup.movie.data.database.impl.entity.FavoriteMovieEntity
1919
import soup.movie.data.database.impl.entity.MovieEntity
2020
import soup.movie.data.database.impl.entity.OpenDateAlarmEntity
21+
import soup.movie.datetime.calculateDDay
22+
import soup.movie.datetime.toLocalDate
2123
import soup.movie.model.MovieModel
2224
import soup.movie.model.OpenDateAlarmModel
2325
import soup.movie.model.TheaterRatingsModel
26+
import java.time.LocalDate
2427

25-
fun MovieEntity.toMovie() = MovieModel(
26-
id, score, title, posterUrl, openDate, isNow, age, nationFilter, genres, boxOffice,
27-
TheaterRatingsModel(cgv, lotte, megabox),
28-
)
28+
fun MovieEntity.toMovie(today: LocalDate): MovieModel {
29+
val openLocalDate = openDate.toLocalDate()
30+
return MovieModel(
31+
id = id,
32+
score = score,
33+
title = title,
34+
posterUrl = posterUrl,
35+
openDate = openDate,
36+
isNow = isNow,
37+
age = age,
38+
nationFilter = nationFilter,
39+
genres = genres,
40+
boxOffice = boxOffice,
41+
theater = TheaterRatingsModel(cgv, lotte, megabox),
42+
openLocalDate = openLocalDate,
43+
dDay = if (!isNow) calculateDDay(openDate = openLocalDate, today = today) else null,
44+
)
45+
}
2946

30-
fun FavoriteMovieEntity.toMovie(): MovieModel {
47+
fun FavoriteMovieEntity.toMovie(today: LocalDate): MovieModel {
48+
val openLocalDate = openDate.toLocalDate()
3149
return MovieModel(
3250
id = id,
3351
score = score,
@@ -40,7 +58,15 @@ fun FavoriteMovieEntity.toMovie(): MovieModel {
4058
genres = genres,
4159
boxOffice = boxOffice,
4260
theater = TheaterRatingsModel(cgv, lotte, megabox),
61+
openLocalDate = openLocalDate,
62+
dDay = if (!isNow) calculateDDay(openDate = openLocalDate, today = today) else null,
4363
)
4464
}
4565

46-
fun OpenDateAlarmEntity.toOpenDateAlarm() = OpenDateAlarmModel(movieId, title, openDate)
66+
fun OpenDateAlarmEntity.toOpenDateAlarm(): OpenDateAlarmModel {
67+
return OpenDateAlarmModel(
68+
movieId = movieId,
69+
title = title,
70+
openDate = openDate,
71+
)
72+
}

β€Ždata/model/src/main/java/soup/movie/model/MovieModel.ktβ€Ž

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
*/
1616
package soup.movie.model
1717

18+
import java.time.LocalDate
19+
1820
/**
1921
* @param genres μž₯λ₯΄
2022
*/
@@ -30,6 +32,8 @@ data class MovieModel(
3032
val genres: List<String>?,
3133
val boxOffice: Int?,
3234
val theater: TheaterRatingsModel,
35+
val openLocalDate: LocalDate?,
36+
val dDay: Long?,
3337
) {
3438

3539
val isPlan: Boolean = !isNow

β€Ždata/network/api/build.gradleβ€Ž

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ android {
88
}
99

1010
dependencies {
11+
implementation projects.core.datetime
1112
implementation projects.data.model
1213
implementation libs.kotlin.stdlib
1314
implementation libs.kotlin.serialization

β€Ždata/network/api/src/main/java/soup/movie/data/network/response/MovieDetailResponse.ktβ€Ž

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,12 @@ package soup.movie.data.network.response
1717

1818
import kotlinx.serialization.SerialName
1919
import kotlinx.serialization.Serializable
20+
import soup.movie.datetime.calculateDDay
21+
import soup.movie.datetime.toLocalDate
2022
import soup.movie.model.MovieDetailModel
2123
import soup.movie.model.MovieModel
2224
import soup.movie.model.TheaterRatingsModel
25+
import java.time.LocalDate
2326

2427
/**
2528
* @param genres μž₯λ₯΄
@@ -59,7 +62,8 @@ class MovieDetailResponse(
5962
val trailers: List<TrailerResponse>? = null,
6063
)
6164

62-
fun MovieDetailResponse.asModel(): MovieDetailModel {
65+
fun MovieDetailResponse.asModel(today: LocalDate): MovieDetailModel {
66+
val openLocalDate = openDate.toLocalDate()
6367
return MovieDetailModel(
6468
movie = MovieModel(
6569
id = id,
@@ -77,6 +81,8 @@ fun MovieDetailResponse.asModel(): MovieDetailModel {
7781
lotte = lotte?.star,
7882
megabox = megabox?.star,
7983
),
84+
openLocalDate = openLocalDate,
85+
dDay = if (!isNow) calculateDDay(openDate = openLocalDate, today = today) else null,
8086
),
8187

8288
boxOffice = boxOffice?.asModel(),

β€Ždata/network/api/src/main/java/soup/movie/data/network/response/MovieListResponse.ktβ€Ž

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,17 @@ package soup.movie.data.network.response
1717

1818
import kotlinx.serialization.Serializable
1919
import soup.movie.model.MovieListModel
20+
import java.time.LocalDate
2021

2122
@Serializable
2223
class MovieListResponse(
2324
val lastUpdateTime: Long,
2425
val list: List<MovieResponse> = emptyList(),
2526
)
2627

27-
fun MovieListResponse.asModel(): MovieListModel {
28+
fun MovieListResponse.asModel(today: LocalDate): MovieListModel {
2829
return MovieListModel(
2930
lastUpdateTime = lastUpdateTime,
30-
list = list.map { it.asModel() },
31+
list = list.map { it.asModel(today = today) },
3132
)
3233
}

β€Ždata/network/api/src/main/java/soup/movie/data/network/response/MovieResponse.ktβ€Ž

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,10 @@ package soup.movie.data.network.response
1717

1818
import kotlinx.serialization.SerialName
1919
import kotlinx.serialization.Serializable
20+
import soup.movie.datetime.calculateDDay
21+
import soup.movie.datetime.toLocalDate
2022
import soup.movie.model.MovieModel
23+
import java.time.LocalDate
2124

2225
@Serializable
2326
class MovieResponse(
@@ -35,7 +38,8 @@ class MovieResponse(
3538
val theater: TheaterRatingsResponse,
3639
)
3740

38-
fun MovieResponse.asModel(): MovieModel {
41+
fun MovieResponse.asModel(today: LocalDate): MovieModel {
42+
val openLocalDate = openDate.toLocalDate()
3943
return MovieModel(
4044
id = id,
4145
score = score,
@@ -48,5 +52,7 @@ fun MovieResponse.asModel(): MovieModel {
4852
genres = genres,
4953
boxOffice = boxOffice,
5054
theater = theater.asModel(),
55+
openLocalDate = openLocalDate,
56+
dDay = if (!isNow) calculateDDay(openDate = openLocalDate, today = today) else null,
5157
)
5258
}

0 commit comments

Comments
Β (0)