From 68dba92e3eb5c17afbcea32e1093bd84835a57d7 Mon Sep 17 00:00:00 2001 From: Charles Dufour Date: Sat, 13 Jan 2024 12:31:45 +0100 Subject: [PATCH] [TRELLO-2155] Refacto --- app/repositories/tasklock/TaskDetails.scala | 2 +- .../tasklock/TaskDetailsTable.scala | 22 +++++++++---------- app/tasks/ScheduledTask.scala | 12 +++++----- app/tasks/account/InactiveAccountTask.scala | 4 ++-- app/tasks/company/CompanyUpdateTask.scala | 4 ++-- app/tasks/report/ReportClosureTask.scala | 4 ++-- app/tasks/report/ReportNotificationTask.scala | 4 ++-- app/tasks/report/ReportRemindersTask.scala | 4 ++-- .../default/V17__task_details_table.sql | 2 +- .../tasks/company/CompanyUpdateTaskSpec.scala | 10 ++++----- .../report/ReportRemindersTaskUnitSpec.scala | 4 ++-- 11 files changed, 36 insertions(+), 36 deletions(-) diff --git a/app/repositories/tasklock/TaskDetails.scala b/app/repositories/tasklock/TaskDetails.scala index e2d673f0..fb381873 100644 --- a/app/repositories/tasklock/TaskDetails.scala +++ b/app/repositories/tasklock/TaskDetails.scala @@ -17,7 +17,7 @@ case class TaskDetails( startTime: LocalTime, interval: FiniteDuration, lastRunDate: OffsetDateTime, - lastRunStatus: String + lastRunError: Option[String] ) object TaskDetails { diff --git a/app/repositories/tasklock/TaskDetailsTable.scala b/app/repositories/tasklock/TaskDetailsTable.scala index 222a9b7e..aeb9a162 100644 --- a/app/repositories/tasklock/TaskDetailsTable.scala +++ b/app/repositories/tasklock/TaskDetailsTable.scala @@ -11,26 +11,26 @@ import scala.jdk.DurationConverters._ class TaskDetailsTable(tag: Tag) extends TypedDatabaseTable[TaskDetails, Int](tag, "task_details") { - def name = column[String]("name") - def startTime = column[LocalTime]("start_time") - def interval = column[Duration]("interval") - def lastRunDate = column[OffsetDateTime]("last_run_date") - def lastRunStatus = column[String]("last_run_status") + def name = column[String]("name") + def startTime = column[LocalTime]("start_time") + def interval = column[Duration]("interval") + def lastRunDate = column[OffsetDateTime]("last_run_date") + def lastRunError = column[Option[String]]("last_run_error") - type TaskData = (Int, String, LocalTime, Duration, OffsetDateTime, String) + type TaskData = (Int, String, LocalTime, Duration, OffsetDateTime, Option[String]) def constructTaskDetails: TaskData => TaskDetails = { - case (id, name, startTime, interval, lastRunDate, lastRunStatus) => - TaskDetails(id, name, startTime, interval.toScala, lastRunDate, lastRunStatus) + case (id, name, startTime, interval, lastRunDate, lastRunError) => + TaskDetails(id, name, startTime, interval.toScala, lastRunDate, lastRunError) } def extractTaskDetails: PartialFunction[TaskDetails, TaskData] = { - case TaskDetails(id, name, startTime, interval, lastRunDate, lastRunStatus) => - (id, name, startTime, interval.toJava, lastRunDate, lastRunStatus) + case TaskDetails(id, name, startTime, interval, lastRunDate, lastRunError) => + (id, name, startTime, interval.toJava, lastRunDate, lastRunError) } override def * : ProvenShape[TaskDetails] = - (id, name, startTime, interval, lastRunDate, lastRunStatus) <> (constructTaskDetails, extractTaskDetails.lift) + (id, name, startTime, interval, lastRunDate, lastRunError) <> (constructTaskDetails, extractTaskDetails.lift) } diff --git a/app/tasks/ScheduledTask.scala b/app/tasks/ScheduledTask.scala index ce8495e4..b8271c2f 100644 --- a/app/tasks/ScheduledTask.scala +++ b/app/tasks/ScheduledTask.scala @@ -28,12 +28,12 @@ abstract class ScheduledTask( val startTime: LocalTime val interval: FiniteDuration - private def createTaskModel(status: String) = - TaskDetails(taskId, taskName, startTime, interval, lastRunDate = OffsetDateTime.now(), status) + private def createTaskDetails(error: Option[String]) = + TaskDetails(taskId, taskName, startTime, interval, lastRunDate = OffsetDateTime.now(), error) - private def createOrUpdateTaskDetails(taskModel: TaskDetails) = + private def createOrUpdateTaskDetails(taskDetails: TaskDetails) = taskRepository - .createOrUpdate(taskModel) + .createOrUpdate(taskDetails) .map(_ => logger.debug(s"$taskName updated in DB")) .recover(err => logger.errorWithTitle("task_failed", s"$taskName failed", err)) @@ -48,11 +48,11 @@ abstract class ScheduledTask( runTask() .flatMap { _ => logger.info(s"$taskName finished") - createOrUpdateTaskDetails(createTaskModel("success")) + createOrUpdateTaskDetails(createTaskDetails(None)) } .recoverWith { err => logger.errorWithTitle("task_failed", s"$taskName failed", err) - createOrUpdateTaskDetails(createTaskModel("failure")) + createOrUpdateTaskDetails(createTaskDetails(Some(err.getMessage))) } } else { logger.info(s"Lock for $taskName is already taken by another instance. Nothing to do here.") diff --git a/app/tasks/account/InactiveAccountTask.scala b/app/tasks/account/InactiveAccountTask.scala index f09c3d76..b5f14403 100644 --- a/app/tasks/account/InactiveAccountTask.scala +++ b/app/tasks/account/InactiveAccountTask.scala @@ -19,9 +19,9 @@ class InactiveAccountTask( inactiveDgccrfAccountRemoveTask: InactiveDgccrfAccountRemoveTask, inactiveDgccrfAccountSendReminderTask: InactiveDgccrfAccountReminderTask, taskConfiguration: TaskConfiguration, - taskLockRepository: TaskRepositoryInterface + taskRepository: TaskRepositoryInterface )(implicit executionContext: ExecutionContext) - extends ScheduledTask(1, "inactive_account_task", taskLockRepository, actorSystem, taskConfiguration) { + extends ScheduledTask(1, "inactive_account_task", taskRepository, actorSystem, taskConfiguration) { override val logger: Logger = Logger(this.getClass) override val startTime: LocalTime = taskConfiguration.inactiveAccounts.startTime diff --git a/app/tasks/company/CompanyUpdateTask.scala b/app/tasks/company/CompanyUpdateTask.scala index 9ff39a12..ac2ecd4d 100644 --- a/app/tasks/company/CompanyUpdateTask.scala +++ b/app/tasks/company/CompanyUpdateTask.scala @@ -29,11 +29,11 @@ class CompanyUpdateTask( companySyncService: CompanySyncServiceInterface, companySyncRepository: CompanySyncRepositoryInterface, taskConfiguration: TaskConfiguration, - taskLockRepository: TaskRepositoryInterface + taskRepository: TaskRepositoryInterface )(implicit executionContext: ExecutionContext, materializer: Materializer -) extends ScheduledTask(5, "company_update_task", taskLockRepository, actorSystem, taskConfiguration) { +) extends ScheduledTask(5, "company_update_task", taskRepository, actorSystem, taskConfiguration) { implicit val session: SlickSession = SlickSession.forConfig("slick.dbs.default") diff --git a/app/tasks/report/ReportClosureTask.scala b/app/tasks/report/ReportClosureTask.scala index d472e32d..71bd3a2a 100644 --- a/app/tasks/report/ReportClosureTask.scala +++ b/app/tasks/report/ReportClosureTask.scala @@ -42,10 +42,10 @@ class ReportClosureTask( companyRepository: CompanyRepositoryInterface, mailService: MailService, taskConfiguration: TaskConfiguration, - taskLockRepository: TaskRepositoryInterface, + taskRepository: TaskRepositoryInterface, messagesApi: MessagesApi )(implicit val executionContext: ExecutionContext) - extends ScheduledTask(2, "report_closure_task", taskLockRepository, actorSystem, taskConfiguration) { + extends ScheduledTask(2, "report_closure_task", taskRepository, actorSystem, taskConfiguration) { override val logger: Logger = Logger(this.getClass) override val startTime: LocalTime = taskConfiguration.reportClosure.startTime diff --git a/app/tasks/report/ReportNotificationTask.scala b/app/tasks/report/ReportNotificationTask.scala index a5af1a62..d0c9ae53 100644 --- a/app/tasks/report/ReportNotificationTask.scala +++ b/app/tasks/report/ReportNotificationTask.scala @@ -38,9 +38,9 @@ class ReportNotificationTask( userRepository: UserRepositoryInterface, mailService: MailService, taskConfiguration: TaskConfiguration, - taskLockRepository: TaskRepositoryInterface + taskRepository: TaskRepositoryInterface )(implicit executionContext: ExecutionContext) - extends ScheduledTask(3, "report_notification_task", taskLockRepository, actorSystem, taskConfiguration) { + extends ScheduledTask(3, "report_notification_task", taskRepository, actorSystem, taskConfiguration) { override val logger: Logger = Logger(this.getClass) override val startTime: LocalTime = taskConfiguration.subscription.startTime diff --git a/app/tasks/report/ReportRemindersTask.scala b/app/tasks/report/ReportRemindersTask.scala index 4a00b629..ebb34487 100644 --- a/app/tasks/report/ReportRemindersTask.scala +++ b/app/tasks/report/ReportRemindersTask.scala @@ -38,9 +38,9 @@ class ReportRemindersTask( mailService: MailServiceInterface, companiesVisibilityOrchestrator: CompaniesVisibilityOrchestrator, taskConfiguration: TaskConfiguration, - taskLockRepository: TaskRepositoryInterface + taskRepository: TaskRepositoryInterface )(implicit val executionContext: ExecutionContext) - extends ScheduledTask(4, "report_reminders_task", taskLockRepository, actorSystem, taskConfiguration) { + extends ScheduledTask(4, "report_reminders_task", taskRepository, actorSystem, taskConfiguration) { override val logger: Logger = Logger(this.getClass) override val startTime: LocalTime = taskConfiguration.reportReminders.startTime diff --git a/conf/db/migration/default/V17__task_details_table.sql b/conf/db/migration/default/V17__task_details_table.sql index 75024f51..37f0d132 100644 --- a/conf/db/migration/default/V17__task_details_table.sql +++ b/conf/db/migration/default/V17__task_details_table.sql @@ -4,5 +4,5 @@ CREATE TABLE IF NOT EXISTS task_details ( start_time TIME WITHOUT TIME ZONE NOT NULL, interval INTERVAL NOT NULL, last_run_date TIMESTAMP WITH TIME ZONE NOT NULL, - last_run_status VARCHAR NOT NULL + last_run_error VARCHAR ); \ No newline at end of file diff --git a/test/tasks/company/CompanyUpdateTaskSpec.scala b/test/tasks/company/CompanyUpdateTaskSpec.scala index 21abb118..c7cbe83d 100644 --- a/test/tasks/company/CompanyUpdateTaskSpec.scala +++ b/test/tasks/company/CompanyUpdateTaskSpec.scala @@ -26,7 +26,7 @@ class CompanyUpdateTaskSpec(implicit ee: ExecutionEnv) val (app, components) = TestApp.buildApp() implicit val mat: Materializer = app.materializer - val taskLockRepositoryMock = new TaskRepositoryMock() + val taskRepositoryMock = new TaskRepositoryMock() "CompanyUpdateTask" should { sequential @@ -38,7 +38,7 @@ class CompanyUpdateTaskSpec(implicit ee: ExecutionEnv) serviceMock, components.companySyncRepository, components.applicationConfiguration.task, - taskLockRepositoryMock + taskRepositoryMock ) val company = Fixtures.genCompany.sample.get val newName = Gen.alphaNumStr.sample.get @@ -89,7 +89,7 @@ class CompanyUpdateTaskSpec(implicit ee: ExecutionEnv) serviceMock, components.companySyncRepository, components.applicationConfiguration.task, - taskLockRepositoryMock + taskRepositoryMock ) val company = Fixtures.genCompany.sample.get val newName = Gen.alphaNumStr.sample.get @@ -135,7 +135,7 @@ class CompanyUpdateTaskSpec(implicit ee: ExecutionEnv) serviceMock, components.companySyncRepository, components.applicationConfiguration.task, - taskLockRepositoryMock + taskRepositoryMock ) val company = Fixtures.genCompany.sample.get // Truncated to MILLIS because PG does not handle nanos @@ -185,7 +185,7 @@ class CompanyUpdateTaskSpec(implicit ee: ExecutionEnv) serviceMock, components.companySyncRepository, components.applicationConfiguration.task, - taskLockRepositoryMock + taskRepositoryMock ) val company = Fixtures.genCompany.sample.get // Truncated to MILLIS because PG does not handle nanos diff --git a/test/tasks/report/ReportRemindersTaskUnitSpec.scala b/test/tasks/report/ReportRemindersTaskUnitSpec.scala index 82c1f2e7..bfa31e31 100644 --- a/test/tasks/report/ReportRemindersTaskUnitSpec.scala +++ b/test/tasks/report/ReportRemindersTaskUnitSpec.scala @@ -37,7 +37,7 @@ import scala.concurrent.duration.DurationInt class ReportRemindersTaskUnitSpec extends Specification with FutureMatchers { - val taskLockRepositoryMock = new TaskRepositoryMock() + val taskRepositoryMock = new TaskRepositoryMock() val taskConf = TaskConfiguration( active = true, @@ -74,7 +74,7 @@ class ReportRemindersTaskUnitSpec extends Specification with FutureMatchers { mailService, companiesVisibilityOrchestrator, taskConf, - taskLockRepositoryMock + taskRepositoryMock ) val company1 = Fixtures.genCompany.sample.get