Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
T
TeamPrinterV2
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Aleksandr
TeamPrinterV2
Commits
97a854e8
Commit
97a854e8
authored
Jun 28, 2024
by
Aleksandr Tamakov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Rearrange modules
parent
6fcf06a5
Show whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
200 additions
and
63 deletions
+200
-63
feature/job/src/main/java/com/isidroid/job/constant/JobStatus.kt
+3
-0
feature/job/src/main/java/com/isidroid/job/data/source/remote/JobNetworkSource.kt
+0
-13
feature/job/src/main/java/com/isidroid/job/data/source/remote/api/ApiJob.kt
+0
-16
feature/job/src/main/java/com/isidroid/job/di/JobModule.kt
+1
-1
feature/job/src/main/java/com/isidroid/job/repository/JobRepository.kt
+3
-2
feature/job/src/main/java/com/isidroid/job/repository/JobRepositoryImpl.kt
+2
-8
feature/job_sender/src/main/java/com/isidroid/job_sender/data/source/remote/MockInterceptor.kt
+12
-0
feature/job_sender/src/main/java/com/isidroid/job_sender/data/source/remote/SendJobNetworkSource.kt
+30
-0
feature/job_sender/src/main/java/com/isidroid/job_sender/data/source/remote/api/ApiCommand.kt
+16
-0
feature/job_sender/src/main/java/com/isidroid/job_sender/data/source/remote/api/ApiUpload.kt
+23
-0
feature/job_sender/src/main/java/com/isidroid/job_sender/di/JobSenderModule.kt
+69
-1
feature/job_sender/src/main/java/com/isidroid/job_sender/repository/JobSendRepository.kt
+2
-0
feature/job_sender/src/main/java/com/isidroid/job_sender/repository/JobSendRepositoryImpl.kt
+26
-9
feature/job_sender/src/test/java/com/isidroid/job_sender/UploadJobsTest.kt
+13
-13
No files found.
feature/job/src/main/java/com/isidroid/job/constant/JobStatus.kt
View file @
97a854e8
...
@@ -18,6 +18,7 @@ annotation class JobStatus {
...
@@ -18,6 +18,7 @@ annotation class JobStatus {
const
val
IDLE
=
0
const
val
IDLE
=
0
const
val
RENDER_UPLOAD
=
9
const
val
RENDER_UPLOAD
=
9
const
val
READY_TO_PRINT
=
10
const
val
READY_TO_PRINT
=
10
const
val
UPLOAD_ERROR
=
11
}
}
}
}
...
@@ -36,5 +37,6 @@ val Int.statusName
...
@@ -36,5 +37,6 @@ val Int.statusName
JobStatus
.
IDLE
->
"IDLE"
JobStatus
.
IDLE
->
"IDLE"
JobStatus
.
RENDER_UPLOAD
->
"RENDER_UPLOAD"
JobStatus
.
RENDER_UPLOAD
->
"RENDER_UPLOAD"
JobStatus
.
READY_TO_PRINT
->
"READY_TO_PRINT"
JobStatus
.
READY_TO_PRINT
->
"READY_TO_PRINT"
JobStatus
.
UPLOAD_ERROR
->
"UPLOAD_ERROR"
else
->
"Unknown"
else
->
"Unknown"
}
}
\ No newline at end of file
feature/job/src/main/java/com/isidroid/job/data/source/remote/JobNetworkSource.kt
View file @
97a854e8
...
@@ -14,18 +14,6 @@ class JobNetworkSource(private val api: ApiJob) {
...
@@ -14,18 +14,6 @@ class JobNetworkSource(private val api: ApiJob) {
return
response
.
body
()
?.
transform
()
return
response
.
body
()
?.
transform
()
}
}
fun
uploadPage
(
jobId
:
String
,
token
:
String
,
filePath
:
String
):
Boolean
{
val
file
=
File
(
filePath
)
val
requestBody
=
ProgressEmittingRequestBody
(
"image/*"
,
file
)
val
fileBody
=
MultipartBody
.
Part
.
createFormData
(
"file"
,
file
.
name
,
requestBody
)
val
response
=
api
.
uploadPage
(
jobId
=
jobId
,
token
=
token
,
fileBody
).
execute
()
return
response
.
isSuccessful
}
fun
complete
(
jobId
:
String
,
token
:
String
):
Boolean
{
api
.
complete
(
jobId
=
jobId
,
token
=
token
).
execute
()
return
true
}
}
}
\ No newline at end of file
feature/job/src/main/java/com/isidroid/job/data/source/remote/api/ApiJob.kt
View file @
97a854e8
...
@@ -16,19 +16,4 @@ import retrofit2.http.Path
...
@@ -16,19 +16,4 @@ import retrofit2.http.Path
interface
ApiJob
{
interface
ApiJob
{
@POST
(
"api/job"
)
@POST
(
"api/job"
)
fun
createJob
(
@Body
request
:
CreateJobRequest
):
Call
<
CreateJobResponse
>
fun
createJob
(
@Body
request
:
CreateJobRequest
):
Call
<
CreateJobResponse
>
@Multipart
@POST
(
"api/job/{jobId}"
)
fun
uploadPage
(
@Path
(
"jobId"
)
jobId
:
String
,
@Header
(
"X-Access-Token"
)
token
:
String
,
@Part
body
:
MultipartBody
.
Part
):
Call
<
ResponseBody
>
@PATCH
(
"api/job/{jobId}"
)
fun
complete
(
@Path
(
"jobId"
)
jobId
:
String
,
@Header
(
"X-Access-Token"
)
token
:
String
,
):
Call
<
ResponseBody
>
}
}
\ No newline at end of file
feature/job/src/main/java/com/isidroid/job/di/JobModule.kt
View file @
97a854e8
...
@@ -50,7 +50,7 @@ internal object JobModule {
...
@@ -50,7 +50,7 @@ internal object JobModule {
):
Interceptor
=
MockInterceptor
(
context
,
isMock
)
):
Interceptor
=
MockInterceptor
(
context
,
isMock
)
@Singleton
@Provides
@Singleton
@Provides
fun
provideApi
Spot
(
fun
provideApi
Job
(
@ApiServerUrl
serverUrl
:
String
,
@ApiServerUrl
serverUrl
:
String
,
@DiDebuggableBuild
isDebugBuild
:
Boolean
,
@DiDebuggableBuild
isDebugBuild
:
Boolean
,
@ApiTokenInterceptor
authInterceptor
:
Interceptor
,
@ApiTokenInterceptor
authInterceptor
:
Interceptor
,
...
...
feature/job/src/main/java/com/isidroid/job/repository/JobRepository.kt
View file @
97a854e8
...
@@ -5,6 +5,7 @@ import com.isidroid.job.model.PrintJob
...
@@ -5,6 +5,7 @@ import com.isidroid.job.model.PrintJob
import
java.io.File
import
java.io.File
interface
JobRepository
{
interface
JobRepository
{
suspend
fun
insert
(
vararg
printJob
:
PrintJob
)
suspend
fun
createJob
(
suspend
fun
createJob
(
name
:
String
,
name
:
String
,
clientName
:
String
,
clientName
:
String
,
...
@@ -18,6 +19,5 @@ interface JobRepository {
...
@@ -18,6 +19,5 @@ interface JobRepository {
suspend
fun
readLocalList
(
spotId
:
String
?
=
null
,
@JobStatus
status
:
Int
?
=
null
,
ids
:
List
<
String
>?
=
null
):
Collection
<
PrintJob
>
suspend
fun
readLocalList
(
spotId
:
String
?
=
null
,
@JobStatus
status
:
Int
?
=
null
,
ids
:
List
<
String
>?
=
null
):
Collection
<
PrintJob
>
suspend
fun
updateJobStatus
(
@JobStatus
status
:
Int
,
vararg
ids
:
String
)
suspend
fun
updateJobStatus
(
@JobStatus
status
:
Int
,
vararg
ids
:
String
)
suspend
fun
uploadPage
(
jobId
:
String
,
token
:
String
,
filePath
:
String
):
Boolean
suspend
fun
completeUpload
(
jobId
:
String
,
token
:
String
):
PrintJob
?
}
}
\ No newline at end of file
feature/job/src/main/java/com/isidroid/job/repository/JobRepositoryImpl.kt
View file @
97a854e8
package
com.isidroid.job.repository
package
com.isidroid.job.repository
import
androidx.compose.runtime.produceState
import
com.isidroid.job.CreateJobException
import
com.isidroid.job.CreateJobException
import
com.isidroid.job.constant.JobStatus
import
com.isidroid.job.constant.JobStatus
import
com.isidroid.job.data.source.local.JobLocalSource
import
com.isidroid.job.data.source.local.JobLocalSource
...
@@ -11,6 +12,7 @@ import java.io.File
...
@@ -11,6 +12,7 @@ import java.io.File
private
val
jobNetworkSource
:
JobNetworkSource
,
private
val
jobNetworkSource
:
JobNetworkSource
,
private
val
jobLocalSource
:
JobLocalSource
,
private
val
jobLocalSource
:
JobLocalSource
,
)
:
JobRepository
{
)
:
JobRepository
{
override
suspend
fun
insert
(
vararg
printJob
:
PrintJob
)
=
jobLocalSource
.
insert
(*
printJob
)
override
suspend
fun
createJob
(
override
suspend
fun
createJob
(
name
:
String
,
name
:
String
,
...
@@ -32,11 +34,4 @@ import java.io.File
...
@@ -32,11 +34,4 @@ import java.io.File
override
suspend
fun
readLocalList
(
spotId
:
String
?,
status
:
Int
?,
ids
:
List
<
String
>?)
=
jobLocalSource
.
find
(
spotId
=
spotId
,
status
=
status
,
ids
=
ids
)
override
suspend
fun
readLocalList
(
spotId
:
String
?,
status
:
Int
?,
ids
:
List
<
String
>?)
=
jobLocalSource
.
find
(
spotId
=
spotId
,
status
=
status
,
ids
=
ids
)
override
suspend
fun
updateJobStatus
(
status
:
Int
,
vararg
ids
:
String
)
=
jobLocalSource
.
updateJobStatus
(
status
,
*
ids
)
override
suspend
fun
updateJobStatus
(
status
:
Int
,
vararg
ids
:
String
)
=
jobLocalSource
.
updateJobStatus
(
status
,
*
ids
)
override
suspend
fun
uploadPage
(
jobId
:
String
,
token
:
String
,
filePath
:
String
)
=
jobNetworkSource
.
uploadPage
(
jobId
=
jobId
,
token
=
token
,
filePath
=
filePath
)
override
suspend
fun
completeUpload
(
jobId
:
String
,
token
:
String
):
PrintJob
?
{
val
printJob
=
jobLocalSource
.
find
(
ids
=
listOf
(
jobId
)).
firstOrNull
()
val
uploadResult
=
jobNetworkSource
.
complete
(
jobId
=
jobId
,
token
=
token
)
return
printJob
?.
copy
(
status
=
JobStatus
.
READY_TO_PRINT
)
?.
also
{
jobLocalSource
.
insert
(
it
)
}
?.
takeIf
{
uploadResult
}
}
}
}
\ No newline at end of file
feature/job_sender/src/main/java/com/isidroid/job_sender/data/source/remote/MockInterceptor.kt
0 → 100644
View file @
97a854e8
package
com.isidroid.job_sender.data.source.remote
import
android.content.Context
import
okhttp3.Interceptor
import
okhttp3.Response
class
MockInterceptor
(
context
:
Context
,
isMock
:
Boolean
)
:
Interceptor
{
override
fun
intercept
(
chain
:
Interceptor
.
Chain
):
Response
{
return
chain
.
proceed
(
chain
.
request
())
}
}
\ No newline at end of file
feature/job_sender/src/main/java/com/isidroid/job_sender/data/source/remote/SendJobNetworkSource.kt
0 → 100644
View file @
97a854e8
package
com.isidroid.job_sender.data.source.remote
import
com.isidroid.job_sender.data.source.remote.api.ApiCommand
import
com.isidroid.job_sender.data.source.remote.api.ApiUpload
import
com.isidroid.network.ProgressEmittingRequestBody
import
okhttp3.MultipartBody
import
java.io.File
import
javax.inject.Inject
import
javax.inject.Singleton
@Singleton
class
SendJobNetworkSource
@Inject
constructor
(
private
val
apiUpload
:
ApiUpload
,
private
val
apiCommand
:
ApiCommand
)
{
fun
uploadPage
(
jobId
:
String
,
token
:
String
,
filePath
:
String
):
Boolean
{
val
file
=
File
(
filePath
)
val
requestBody
=
ProgressEmittingRequestBody
(
"image/*"
,
file
)
val
fileBody
=
MultipartBody
.
Part
.
createFormData
(
"file"
,
file
.
name
,
requestBody
)
val
response
=
apiUpload
.
upload
(
jobId
=
jobId
,
token
=
token
,
fileBody
).
execute
()
return
response
.
isSuccessful
}
fun
complete
(
jobId
:
String
,
token
:
String
):
Boolean
{
apiCommand
.
complete
(
jobId
=
jobId
,
token
=
token
).
execute
()
return
true
}
}
\ No newline at end of file
feature/job_sender/src/main/java/com/isidroid/job_sender/data/source/remote/api/ApiCommand.kt
0 → 100644
View file @
97a854e8
package
com.isidroid.job_sender.data.source.remote.api
import
okhttp3.ResponseBody
import
retrofit2.Call
import
retrofit2.http.Header
import
retrofit2.http.PATCH
import
retrofit2.http.Path
interface
ApiCommand
{
@PATCH
(
"api/job/{jobId}"
)
fun
complete
(
@Path
(
"jobId"
)
jobId
:
String
,
@Header
(
"X-Access-Token"
)
token
:
String
,
):
Call
<
ResponseBody
>
}
\ No newline at end of file
feature/job_sender/src/main/java/com/isidroid/job_sender/data/source/remote/api/ApiUpload.kt
0 → 100644
View file @
97a854e8
package
com.isidroid.job_sender.data.source.remote.api
import
okhttp3.MultipartBody
import
okhttp3.ResponseBody
import
retrofit2.Call
import
retrofit2.http.Header
import
retrofit2.http.Multipart
import
retrofit2.http.POST
import
retrofit2.http.Part
import
retrofit2.http.Path
interface
ApiUpload
{
@Multipart
@POST
(
"api/job/{jobId}"
)
fun
upload
(
@Path
(
"jobId"
)
jobId
:
String
,
@Header
(
"X-Access-Token"
)
token
:
String
,
@Part
body
:
MultipartBody
.
Part
):
Call
<
ResponseBody
>
}
\ No newline at end of file
feature/job_sender/src/main/java/com/isidroid/job_sender/di/JobSenderModule.kt
View file @
97a854e8
package
com.isidroid.job_sender.di
package
com.isidroid.job_sender.di
import
android.content.Context
import
com.google.gson.Gson
import
com.isidroid.core.DiDebuggableBuild
import
com.isidroid.core.DiMock
import
com.isidroid.job.data.source.remote.api.ApiJob
import
com.isidroid.job.repository.JobRepository
import
com.isidroid.job.repository.JobRepository
import
com.isidroid.job_sender.SendJobEventCollectorFlow
import
com.isidroid.job_sender.SendJobEventCollectorFlow
import
com.isidroid.job_sender.data.source.local.SendJobDao
import
com.isidroid.job_sender.data.source.local.SendJobDao
import
com.isidroid.job_sender.data.source.local.SendJobLocalSource
import
com.isidroid.job_sender.data.source.local.SendJobLocalSource
import
com.isidroid.job_sender.data.source.remote.MockInterceptor
import
com.isidroid.job_sender.data.source.remote.SendJobNetworkSource
import
com.isidroid.job_sender.data.source.remote.api.ApiCommand
import
com.isidroid.job_sender.data.source.remote.api.ApiUpload
import
com.isidroid.job_sender.repository.JobSendRepository
import
com.isidroid.job_sender.repository.JobSendRepository
import
com.isidroid.job_sender.repository.JobSendRepositoryImpl
import
com.isidroid.job_sender.repository.JobSendRepositoryImpl
import
com.isidroid.network.ApiCacheControlInterceptor
import
com.isidroid.network.ApiServerUrl
import
com.isidroid.network.ApiTokenInterceptor
import
com.isidroid.network.createRetrofitApiClient
import
com.isidroid.rendering.repository.RenderRepository
import
com.isidroid.rendering.repository.RenderRepository
import
com.isidroid.spot.repository.SpotRepository
import
com.isidroid.spot.repository.SpotRepository
import
dagger.Module
import
dagger.Module
import
dagger.Provides
import
dagger.Provides
import
dagger.hilt.InstallIn
import
dagger.hilt.InstallIn
import
dagger.hilt.android.qualifiers.ApplicationContext
import
dagger.hilt.components.SingletonComponent
import
dagger.hilt.components.SingletonComponent
import
okhttp3.Interceptor
import
okhttp3.logging.HttpLoggingInterceptor
import
javax.inject.Qualifier
import
javax.inject.Singleton
import
javax.inject.Singleton
@InstallIn
(
SingletonComponent
::
class
)
@InstallIn
(
SingletonComponent
::
class
)
...
@@ -21,11 +38,61 @@ object JobSenderModule {
...
@@ -21,11 +38,61 @@ object JobSenderModule {
fun
provideSendJobLocalSource
(
dao
:
SendJobDao
)
=
SendJobLocalSource
(
dao
)
fun
provideSendJobLocalSource
(
dao
:
SendJobDao
)
=
SendJobLocalSource
(
dao
)
@Provides
@Singleton
@Provides
@Singleton
fun
provideSendJobNetworkSource
(
apiUpload
:
ApiUpload
,
apiCommand
:
ApiCommand
)
=
SendJobNetworkSource
(
apiUpload
,
apiCommand
)
@Provides
@Singleton
fun
provideJobSendRepository
(
fun
provideJobSendRepository
(
renderRepository
:
RenderRepository
,
renderRepository
:
RenderRepository
,
spotRepository
:
SpotRepository
,
spotRepository
:
SpotRepository
,
printJobRepository
:
JobRepository
,
printJobRepository
:
JobRepository
,
sendJobLocalSource
:
SendJobLocalSource
,
sendJobLocalSource
:
SendJobLocalSource
,
sendJobNetworkSource
:
SendJobNetworkSource
,
eventCollector
:
SendJobEventCollectorFlow
,
eventCollector
:
SendJobEventCollectorFlow
,
):
JobSendRepository
=
JobSendRepositoryImpl
(
renderRepository
,
spotRepository
,
printJobRepository
,
sendJobLocalSource
,
eventCollector
)
):
JobSendRepository
=
JobSendRepositoryImpl
(
renderRepository
,
spotRepository
,
printJobRepository
,
sendJobLocalSource
,
sendJobNetworkSource
,
eventCollector
)
@Provides
@DiJobSenderMockInterceptor
fun
provideMockInterceptor
(
@ApplicationContext
context
:
Context
,
@DiMock
isMock
:
Boolean
):
Interceptor
=
MockInterceptor
(
context
,
isMock
)
@Singleton
@Provides
fun
provideApiCommand
(
@ApiServerUrl
serverUrl
:
String
,
@DiDebuggableBuild
isDebugBuild
:
Boolean
,
@ApiTokenInterceptor
authInterceptor
:
Interceptor
,
@DiJobSenderMockInterceptor
mockInterceptor
:
Interceptor
,
@ApiCacheControlInterceptor
cacheInterceptor
:
Interceptor
,
gson
:
Gson
)
=
createRetrofitApiClient
(
baseUrl
=
serverUrl
,
cl
=
ApiCommand
::
class
.
java
,
logLevel
=
HttpLoggingInterceptor
.
Level
.
BODY
,
gson
=
gson
,
isDebugBuild
=
isDebugBuild
,
interceptors
=
listOf
(
authInterceptor
,
mockInterceptor
,
cacheInterceptor
)
)
@Singleton
@Provides
fun
provideApiUpload
(
@ApiServerUrl
serverUrl
:
String
,
@DiDebuggableBuild
isDebugBuild
:
Boolean
,
@ApiTokenInterceptor
authInterceptor
:
Interceptor
,
@DiJobSenderMockInterceptor
mockInterceptor
:
Interceptor
,
@ApiCacheControlInterceptor
cacheInterceptor
:
Interceptor
,
gson
:
Gson
)
=
createRetrofitApiClient
(
baseUrl
=
serverUrl
,
cl
=
ApiUpload
::
class
.
java
,
logLevel
=
HttpLoggingInterceptor
.
Level
.
HEADERS
,
gson
=
gson
,
isDebugBuild
=
isDebugBuild
,
interceptors
=
listOf
(
authInterceptor
,
mockInterceptor
,
cacheInterceptor
)
)
}
}
@Qualifier
@Retention
(
AnnotationRetention
.
RUNTIME
)
@Target
(
AnnotationTarget
.
FUNCTION
,
AnnotationTarget
.
PROPERTY
,
AnnotationTarget
.
VALUE_PARAMETER
)
internal
annotation
class
DiJobSenderMockInterceptor
\ No newline at end of file
feature/job_sender/src/main/java/com/isidroid/job_sender/repository/JobSendRepository.kt
View file @
97a854e8
...
@@ -4,6 +4,8 @@ import com.isidroid.job.model.PrintJob
...
@@ -4,6 +4,8 @@ import com.isidroid.job.model.PrintJob
import
com.isidroid.job_sender.domain.model.PrintJobSender
import
com.isidroid.job_sender.domain.model.PrintJobSender
interface
JobSendRepository
{
interface
JobSendRepository
{
suspend
fun
completeUpload
(
jobId
:
String
,
token
:
String
):
PrintJob
?
suspend
fun
getJobList
(
status
:
Int
):
Collection
<
PrintJob
>
suspend
fun
getJobList
(
status
:
Int
):
Collection
<
PrintJob
>
suspend
fun
getJobSenderList
(
status
:
Int
):
Collection
<
PrintJobSender
>
suspend
fun
getJobSenderList
(
status
:
Int
):
Collection
<
PrintJobSender
>
suspend
fun
checkNotRenderedPrintJobs
(
items
:
Collection
<
PrintJob
>):
Collection
<
PrintJobSender
>?
suspend
fun
checkNotRenderedPrintJobs
(
items
:
Collection
<
PrintJob
>):
Collection
<
PrintJobSender
>?
...
...
feature/job_sender/src/main/java/com/isidroid/job_sender/repository/JobSendRepositoryImpl.kt
View file @
97a854e8
...
@@ -6,12 +6,12 @@ import com.isidroid.job.repository.JobRepository
...
@@ -6,12 +6,12 @@ import com.isidroid.job.repository.JobRepository
import
com.isidroid.job_sender.SendJobEventCollectorFlow
import
com.isidroid.job_sender.SendJobEventCollectorFlow
import
com.isidroid.job_sender.UploadPageException
import
com.isidroid.job_sender.UploadPageException
import
com.isidroid.job_sender.data.source.local.SendJobLocalSource
import
com.isidroid.job_sender.data.source.local.SendJobLocalSource
import
com.isidroid.job_sender.data.source.remote.SendJobNetworkSource
import
com.isidroid.job_sender.domain.model.PrintJobSender
import
com.isidroid.job_sender.domain.model.PrintJobSender
import
com.isidroid.job_sender.ext.createRenderItems
import
com.isidroid.job_sender.ext.createRenderItems
import
com.isidroid.job_sender.ext.decreaseCounter
import
com.isidroid.job_sender.ext.decreaseCounter
import
com.isidroid.rendering.repository.RenderRepository
import
com.isidroid.rendering.repository.RenderRepository
import
com.isidroid.spot.repository.SpotRepository
import
com.isidroid.spot.repository.SpotRepository
import
kotlinx.coroutines.delay
import
timber.log.Timber
import
timber.log.Timber
internal
class
JobSendRepositoryImpl
(
internal
class
JobSendRepositoryImpl
(
...
@@ -19,9 +19,18 @@ internal class JobSendRepositoryImpl(
...
@@ -19,9 +19,18 @@ internal class JobSendRepositoryImpl(
private
val
spotRepository
:
SpotRepository
,
private
val
spotRepository
:
SpotRepository
,
private
val
printJobRepository
:
JobRepository
,
private
val
printJobRepository
:
JobRepository
,
private
val
sendJobLocalSource
:
SendJobLocalSource
,
private
val
sendJobLocalSource
:
SendJobLocalSource
,
private
val
sendJobNetworkSource
:
SendJobNetworkSource
,
private
val
eventCollector
:
SendJobEventCollectorFlow
,
private
val
eventCollector
:
SendJobEventCollectorFlow
,
)
:
JobSendRepository
{
)
:
JobSendRepository
{
override
suspend
fun
completeUpload
(
jobId
:
String
,
token
:
String
):
PrintJob
?
{
val
printJob
=
printJobRepository
.
readLocalList
(
ids
=
listOf
(
jobId
)).
firstOrNull
()
val
uploadResult
=
sendJobNetworkSource
.
complete
(
jobId
=
jobId
,
token
=
token
)
return
printJob
?.
copy
(
status
=
JobStatus
.
READY_TO_PRINT
)
?.
also
{
printJobRepository
.
insert
(
it
)
}
?.
takeIf
{
uploadResult
}
}
override
suspend
fun
getJobList
(
status
:
Int
):
Collection
<
PrintJob
>
=
printJobRepository
.
readLocalList
(
status
=
status
)
override
suspend
fun
getJobList
(
status
:
Int
):
Collection
<
PrintJob
>
=
printJobRepository
.
readLocalList
(
status
=
status
)
override
suspend
fun
getJobSenderList
(
status
:
Int
):
Collection
<
PrintJobSender
>
=
sendJobLocalSource
.
findByStatus
(
status
)
override
suspend
fun
getJobSenderList
(
status
:
Int
):
Collection
<
PrintJobSender
>
=
sendJobLocalSource
.
findByStatus
(
status
)
...
@@ -49,8 +58,7 @@ internal class JobSendRepositoryImpl(
...
@@ -49,8 +58,7 @@ internal class JobSendRepositoryImpl(
eventCollector
.
updateProgress
(
index
,
total
)
eventCollector
.
updateProgress
(
index
,
total
)
try
{
try
{
val
uploadResult
=
printJobRepository
.
uploadPage
(
jobId
=
item
.
printJobId
,
token
=
item
.
accessToken
,
filePath
=
item
.
sourceFile
)
val
uploadResult
=
sendJobNetworkSource
.
uploadPage
(
jobId
=
item
.
printJobId
,
token
=
item
.
accessToken
,
filePath
=
item
.
sourceFile
)
if
(!
uploadResult
)
if
(!
uploadResult
)
throw
UploadPageException
()
throw
UploadPageException
()
...
@@ -65,21 +73,30 @@ internal class JobSendRepositoryImpl(
...
@@ -65,21 +73,30 @@ internal class JobSendRepositoryImpl(
eventCollector
.
updateProgress
(
total
,
total
)
eventCollector
.
updateProgress
(
total
,
total
)
// update jobs
// update jobs
val
jobsIds
=
sendJobResults
.
filter
{
it
.
value
==
0
}.
keys
val
successJobIds
=
sendJobResults
.
filter
{
it
.
value
==
0
}.
keys
printJobRepository
.
updateJobStatus
(
status
=
JobStatus
.
RENDER_UPLOAD
,
*
jobsIds
.
toTypedArray
())
printJobRepository
.
updateJobStatus
(
status
=
JobStatus
.
RENDER_UPLOAD
,
*
successJobIds
.
toTypedArray
())
val
failedJobIds
=
sendJobResults
.
filter
{
it
.
value
!=
0
}.
keys
printJobRepository
.
updateJobStatus
(
status
=
JobStatus
.
UPLOAD_ERROR
,
*
failedJobIds
.
toTypedArray
())
val
jobs
=
printJobRepository
.
readLocalList
(
ids
=
jobsIds
.
toList
())
val
successJobs
=
printJobRepository
.
readLocalList
(
ids
=
successJobIds
.
toList
())
println
(
"failedJobIds=$failedJobIds"
)
val
failedJobs
=
printJobRepository
.
readLocalList
(
ids
=
failedJobIds
.
toList
())
// notify event emitters
// notify event emitters
eventCollector
.
updateStatus
(
status
=
JobStatus
.
RENDER_UPLOAD
,
*
jobs
.
toTypedArray
())
if
(
successJobs
.
isNotEmpty
())
eventCollector
.
updateStatus
(
status
=
JobStatus
.
RENDER_UPLOAD
,
*
successJobs
.
toTypedArray
())
if
(
failedJobs
.
isNotEmpty
())
eventCollector
.
updateStatus
(
status
=
JobStatus
.
UPLOAD_ERROR
,
*
failedJobs
.
toTypedArray
())
return
j
obs
return
successJ
obs
}
}
override
suspend
fun
markJobUploaded
(
items
:
Collection
<
PrintJob
>):
Collection
<
PrintJob
>
{
override
suspend
fun
markJobUploaded
(
items
:
Collection
<
PrintJob
>):
Collection
<
PrintJob
>
{
return
items
.
mapNotNull
{
job
->
return
items
.
mapNotNull
{
job
->
// upload
// upload
val
updateJob
=
printJobRepository
.
completeUpload
(
jobId
=
job
.
id
,
token
=
job
.
accessToken
.
orEmpty
())
val
updateJob
=
completeUpload
(
jobId
=
job
.
id
,
token
=
job
.
accessToken
.
orEmpty
())
// notify event emitters
// notify event emitters
eventCollector
.
updateStatus
(
status
=
JobStatus
.
READY_TO_PRINT
,
updateJob
)
eventCollector
.
updateStatus
(
status
=
JobStatus
.
READY_TO_PRINT
,
updateJob
)
...
...
feature/job_sender/src/test/java/com/isidroid/job_sender/UploadJobsTest.kt
View file @
97a854e8
...
@@ -8,6 +8,7 @@ import com.isidroid.job.data.source.remote.api.ApiJob
...
@@ -8,6 +8,7 @@ import com.isidroid.job.data.source.remote.api.ApiJob
import
com.isidroid.job.model.PrintJob
import
com.isidroid.job.model.PrintJob
import
com.isidroid.job.repository.JobRepository
import
com.isidroid.job.repository.JobRepository
import
com.isidroid.job_sender.data.source.local.SendJobLocalSource
import
com.isidroid.job_sender.data.source.local.SendJobLocalSource
import
com.isidroid.job_sender.data.source.remote.SendJobNetworkSource
import
com.isidroid.job_sender.domain.dto.JobSenderResult
import
com.isidroid.job_sender.domain.dto.JobSenderResult
import
com.isidroid.job_sender.domain.model.PrintJobSender
import
com.isidroid.job_sender.domain.model.PrintJobSender
import
com.isidroid.job_sender.repository.JobSendRepositoryImpl
import
com.isidroid.job_sender.repository.JobSendRepositoryImpl
...
@@ -41,9 +42,8 @@ class UploadJobsTest {
...
@@ -41,9 +42,8 @@ class UploadJobsTest {
private
lateinit
var
repository
:
JobSendRepositoryImpl
private
lateinit
var
repository
:
JobSendRepositoryImpl
private
lateinit
var
spotRepository
:
SpotRepository
private
lateinit
var
spotRepository
:
SpotRepository
private
lateinit
var
sendJobLocalSource
:
SendJobLocalSource
private
lateinit
var
sendJobLocalSource
:
SendJobLocalSource
private
lateinit
var
sendJobNetworkSource
:
SendJobNetworkSource
private
lateinit
var
eventCollector
:
SendJobEventCollectorFlow
private
lateinit
var
eventCollector
:
SendJobEventCollectorFlow
private
lateinit
var
jobLocalSource
:
JobLocalSource
private
lateinit
var
jobNetworkSource
:
JobNetworkSource
private
val
mockWrapper
=
MockWebServerWrapper
{
path
,
method
,
body
->
private
val
mockWrapper
=
MockWebServerWrapper
{
path
,
method
,
body
->
when
{
when
{
...
@@ -58,13 +58,12 @@ class UploadJobsTest {
...
@@ -58,13 +58,12 @@ class UploadJobsTest {
api
=
createApi
(
mockWebServer
,
ApiJob
::
class
.
java
)
api
=
createApi
(
mockWebServer
,
ApiJob
::
class
.
java
)
renderRepository
=
mock
(
RenderRepository
::
class
.
java
)
renderRepository
=
mock
(
RenderRepository
::
class
.
java
)
spotRepository
=
mock
(
SpotRepository
::
class
.
java
)
spotRepository
=
mock
(
SpotRepository
::
class
.
java
)
jobLocalSource
=
mock
(
JobLocalSource
::
class
.
java
)
jobNetworkSource
=
JobNetworkSource
(
api
)
printJobRepository
=
mock
(
JobRepository
::
class
.
java
)
printJobRepository
=
mock
(
JobRepository
::
class
.
java
)
sendJobLocalSource
=
mock
(
SendJobLocalSource
::
class
.
java
)
sendJobLocalSource
=
mock
(
SendJobLocalSource
::
class
.
java
)
sendJobNetworkSource
=
mock
(
SendJobNetworkSource
::
class
.
java
)
eventCollector
=
SendJobEventCollectorFlow
()
eventCollector
=
SendJobEventCollectorFlow
()
repository
=
JobSendRepositoryImpl
(
renderRepository
,
spotRepository
,
printJobRepository
,
sendJobLocalSource
,
eventCollector
)
repository
=
JobSendRepositoryImpl
(
renderRepository
,
spotRepository
,
printJobRepository
,
sendJobLocalSource
,
sendJobNetworkSource
,
eventCollector
)
}
}
@After
@After
...
@@ -83,7 +82,7 @@ class UploadJobsTest {
...
@@ -83,7 +82,7 @@ class UploadJobsTest {
Mockito
.
`when`
(
printJobRepository
.
readLocalList
(
ids
=
items
.
map
{
it
.
printJobId
}.
toList
())).
thenReturn
(
jobs
)
Mockito
.
`when`
(
printJobRepository
.
readLocalList
(
ids
=
items
.
map
{
it
.
printJobId
}.
toList
())).
thenReturn
(
jobs
)
Mockito
.
`when`
(
printJobRepository
.
readLocalList
(
ids
=
emptyList
())).
thenReturn
(
emptyList
())
Mockito
.
`when`
(
printJobRepository
.
readLocalList
(
ids
=
emptyList
())).
thenReturn
(
emptyList
())
Mockito
.
`when`
(
printJobRepository
.
uploadPage
(
printJobSender
.
printJobId
,
""
,
""
)).
thenReturn
(
true
)
Mockito
.
`when`
(
sendJobNetworkSource
.
uploadPage
(
printJobSender
.
printJobId
,
""
,
""
)).
thenReturn
(
true
)
val
events
=
mutableListOf
<
JobSenderResult
>()
val
events
=
mutableListOf
<
JobSenderResult
>()
val
deferred
=
async
{
eventCollector
.
eventsFlow
.
toList
(
events
)
}
val
deferred
=
async
{
eventCollector
.
eventsFlow
.
toList
(
events
)
}
...
@@ -113,7 +112,7 @@ class UploadJobsTest {
...
@@ -113,7 +112,7 @@ class UploadJobsTest {
Mockito
.
`when`
(
printJobRepository
.
readLocalList
(
ids
=
items
.
map
{
it
.
printJobId
}.
distinct
().
toList
())).
thenReturn
(
jobs
)
Mockito
.
`when`
(
printJobRepository
.
readLocalList
(
ids
=
items
.
map
{
it
.
printJobId
}.
distinct
().
toList
())).
thenReturn
(
jobs
)
Mockito
.
`when`
(
printJobRepository
.
readLocalList
(
ids
=
emptyList
())).
thenReturn
(
emptyList
())
Mockito
.
`when`
(
printJobRepository
.
readLocalList
(
ids
=
emptyList
())).
thenReturn
(
emptyList
())
Mockito
.
`when`
(
printJobRepository
.
uploadPage
(
printJobSender
.
printJobId
,
""
,
""
)).
thenReturn
(
true
)
Mockito
.
`when`
(
sendJobNetworkSource
.
uploadPage
(
printJobSender
.
printJobId
,
""
,
""
)).
thenReturn
(
true
)
val
events
=
mutableListOf
<
JobSenderResult
>()
val
events
=
mutableListOf
<
JobSenderResult
>()
val
deferred
=
async
{
eventCollector
.
eventsFlow
.
toList
(
events
)
}
val
deferred
=
async
{
eventCollector
.
eventsFlow
.
toList
(
events
)
}
...
@@ -145,7 +144,7 @@ class UploadJobsTest {
...
@@ -145,7 +144,7 @@ class UploadJobsTest {
Mockito
.
`when`
(
printJobRepository
.
readLocalList
(
ids
=
items
.
map
{
it
.
printJobId
}.
toList
())).
thenReturn
(
jobs
)
Mockito
.
`when`
(
printJobRepository
.
readLocalList
(
ids
=
items
.
map
{
it
.
printJobId
}.
toList
())).
thenReturn
(
jobs
)
Mockito
.
`when`
(
printJobRepository
.
readLocalList
(
ids
=
emptyList
())).
thenReturn
(
emptyList
())
Mockito
.
`when`
(
printJobRepository
.
readLocalList
(
ids
=
emptyList
())).
thenReturn
(
emptyList
())
Mockito
.
`when`
(
printJobRepository
.
uploadPage
(
printJobSender
.
printJobId
,
""
,
""
)).
thenReturn
(
false
)
Mockito
.
`when`
(
sendJobNetworkSource
.
uploadPage
(
printJobSender
.
printJobId
,
""
,
""
)).
thenReturn
(
false
)
val
events
=
mutableListOf
<
JobSenderResult
>()
val
events
=
mutableListOf
<
JobSenderResult
>()
val
deferred
=
async
{
eventCollector
.
eventsFlow
.
toList
(
events
)
}
val
deferred
=
async
{
eventCollector
.
eventsFlow
.
toList
(
events
)
}
...
@@ -179,8 +178,8 @@ class UploadJobsTest {
...
@@ -179,8 +178,8 @@ class UploadJobsTest {
Mockito
.
`when`
(
printJobRepository
.
readLocalList
(
ids
=
items
.
map
{
it
.
printJobId
}.
distinct
().
toList
())).
thenReturn
(
jobs
)
Mockito
.
`when`
(
printJobRepository
.
readLocalList
(
ids
=
items
.
map
{
it
.
printJobId
}.
distinct
().
toList
())).
thenReturn
(
jobs
)
Mockito
.
`when`
(
printJobRepository
.
readLocalList
(
ids
=
emptyList
())).
thenReturn
(
emptyList
())
Mockito
.
`when`
(
printJobRepository
.
readLocalList
(
ids
=
emptyList
())).
thenReturn
(
emptyList
())
Mockito
.
`when`
(
printJobRepository
.
uploadPage
(
printJobSender
.
printJobId
,
"1"
,
""
)).
thenReturn
(
true
)
Mockito
.
`when`
(
sendJobNetworkSource
.
uploadPage
(
printJobSender
.
printJobId
,
"1"
,
""
)).
thenReturn
(
true
)
Mockito
.
`when`
(
printJobRepository
.
uploadPage
(
printJobSender
.
printJobId
,
"2"
,
""
)).
thenReturn
(
false
)
Mockito
.
`when`
(
sendJobNetworkSource
.
uploadPage
(
printJobSender
.
printJobId
,
"2"
,
""
)).
thenReturn
(
false
)
val
events
=
mutableListOf
<
JobSenderResult
>()
val
events
=
mutableListOf
<
JobSenderResult
>()
val
deferred
=
async
{
eventCollector
.
eventsFlow
.
toList
(
events
)
}
val
deferred
=
async
{
eventCollector
.
eventsFlow
.
toList
(
events
)
}
...
@@ -220,10 +219,11 @@ class UploadJobsTest {
...
@@ -220,10 +219,11 @@ class UploadJobsTest {
Mockito
.
`when`
(
printJobRepository
.
readLocalList
(
ids
=
items
.
map
{
it
.
printJobId
}.
distinct
().
toList
())).
thenReturn
(
jobs
)
Mockito
.
`when`
(
printJobRepository
.
readLocalList
(
ids
=
items
.
map
{
it
.
printJobId
}.
distinct
().
toList
())).
thenReturn
(
jobs
)
Mockito
.
`when`
(
printJobRepository
.
readLocalList
(
ids
=
listOf
(
jobId2
))).
thenReturn
(
jobs
)
Mockito
.
`when`
(
printJobRepository
.
readLocalList
(
ids
=
listOf
(
jobId2
))).
thenReturn
(
jobs
)
Mockito
.
`when`
(
printJobRepository
.
readLocalList
(
ids
=
listOf
(
"jobId"
))).
thenReturn
(
jobs
.
filter
{
it
.
accessToken
==
"2"
})
Mockito
.
`when`
(
printJobRepository
.
readLocalList
(
ids
=
emptyList
())).
thenReturn
(
emptyList
())
Mockito
.
`when`
(
printJobRepository
.
readLocalList
(
ids
=
emptyList
())).
thenReturn
(
emptyList
())
Mockito
.
`when`
(
printJobRepository
.
uploadPage
(
printJobSender
.
printJobId
,
"1"
,
""
)).
thenReturn
(
true
)
Mockito
.
`when`
(
sendJobNetworkSource
.
uploadPage
(
printJobSender
.
printJobId
,
"1"
,
""
)).
thenReturn
(
true
)
Mockito
.
`when`
(
printJobRepository
.
uploadPage
(
printJobSender
.
printJobId
,
"2"
,
""
)).
thenReturn
(
false
)
Mockito
.
`when`
(
sendJobNetworkSource
.
uploadPage
(
printJobSender
.
printJobId
,
"2"
,
""
)).
thenReturn
(
false
)
Mockito
.
`when`
(
printJobRepository
.
uploadPage
(
jobId2
,
"3"
,
""
)).
thenReturn
(
true
)
Mockito
.
`when`
(
sendJobNetworkSource
.
uploadPage
(
jobId2
,
"3"
,
""
)).
thenReturn
(
true
)
val
events
=
mutableListOf
<
JobSenderResult
>()
val
events
=
mutableListOf
<
JobSenderResult
>()
val
deferred
=
async
{
eventCollector
.
eventsFlow
.
toList
(
events
)
}
val
deferred
=
async
{
eventCollector
.
eventsFlow
.
toList
(
events
)
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment