diff --git a/pom.xml b/pom.xml
index 1824c74c3..d8dd30bab 100644
--- a/pom.xml
+++ b/pom.xml
@@ -48,14 +48,14 @@
5.18-SNAPSHOT
6.2.4.Final
2.7.14
-
+
-
+
org.flywaydb
flyway-core
- 3.2.1
+ 9.22.0
com.sun.activation
@@ -88,6 +88,30 @@
+
+ fi.vm.sade.tarjonta
+ tarjonta-api
+ 2018-15-SNAPSHOT
+ compile
+
+
+ jsr311-api
+ javax.ws.rs
+
+
+ com.wordnik
+ *
+
+
+ *
+ org.springframework
+
+
+ org.apache.cxf
+ *
+
+
+
fi.vm.sade.java-utils
opintopolku-cas-servlet-filter
diff --git a/sijoittelu-service/README.md b/sijoittelu-service/README.md
index a783ed0b6..44f1ff8c9 100644
--- a/sijoittelu-service/README.md
+++ b/sijoittelu-service/README.md
@@ -8,13 +8,8 @@ Joissakin tapauksissa on tarpeellista ajaa ympäristöä lokaalisti jonkin jaetu
selvittämistä varten. Tämä onnistuu seuraavilla ohjeilla.
1. Kehitysympäristössä käytetään aina paikallista sijoittelutietokantaa (jotta skeemamuutoksia voi kehittää lokaalisti).
-Luo PostgreSQL kontti seuraavilla komennoilla (tarvitsee tehdä vain kerran):
+Kanta on konfiguroitu docker-composella, joten tämän pitää olla asennettu.
- ``` shell
- cd sijoittelu-service/postgresql/docker
- docker build --tag sijoittelu-postgres .
- docker create --name sijoittelu-postgres --env POSTGRES_PASSWORD=postgres -p 5433:5432 sijoittelu-postgres
- ```
2. Kopioi konfiguraatio-template lokaalia kehitystä varten ```'/src/test/resources/application-dev.properties.template'``` -> ```'/src/test/resources/application-dev.properties'```.
Application-dev.properties on ignoroitu Gitissä etteivät salasanat valu repoon. Tähän tiedostoon täytyy täyttää tarvittavat testi-ympäristön
diff --git a/sijoittelu-service/pom.xml b/sijoittelu-service/pom.xml
index b56d25bfa..670f73e5a 100644
--- a/sijoittelu-service/pom.xml
+++ b/sijoittelu-service/pom.xml
@@ -42,6 +42,10 @@
org.springframework.boot
spring-boot-starter-quartz
+
+ org.springframework.boot
+ spring-boot-starter-jdbc
+
org.springdoc
springdoc-openapi-ui
@@ -105,7 +109,6 @@
org.flywaydb
flyway-core
- 9.22.0
@@ -185,26 +188,7 @@
fi.vm.sade.tarjonta
tarjonta-api
- 2018-15-SNAPSHOT
compile
-
-
- jsr311-api
- javax.ws.rs
-
-
- com.wordnik
- *
-
-
- *
- org.springframework
-
-
- org.apache.cxf
- *
-
-
diff --git a/sijoittelu-service/postgresql/Dockerfile b/sijoittelu-service/postgresql/Dockerfile
new file mode 100644
index 000000000..6bb7100b0
--- /dev/null
+++ b/sijoittelu-service/postgresql/Dockerfile
@@ -0,0 +1,3 @@
+FROM postgres:15
+
+COPY configure-sijoittelu-database.sh /docker-entrypoint-initdb.d/
\ No newline at end of file
diff --git a/sijoittelu-service/postgresql/configure-sijoittelu-database.sh b/sijoittelu-service/postgresql/configure-sijoittelu-database.sh
new file mode 100755
index 000000000..93c0799a9
--- /dev/null
+++ b/sijoittelu-service/postgresql/configure-sijoittelu-database.sh
@@ -0,0 +1,23 @@
+#!/usr/bin/env bash
+
+set -euo pipefail
+
+DB_APP_VALINTAREKISTERI_DB=valintarekisteri
+DB_APP_SIJOITTELU_DB=sijoittelu
+DB_APP_USER=oph
+DB_APP_PASSWORD=oph
+
+echo "Creating databases \"$DB_APP_VALINTAREKISTERI_DB\", \"$DB_APP_SIJOITTELU_DB\", creating role \"$DB_APP_USER\" with database owner privileges…"
+
+psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-END
+create role "${DB_APP_USER}" with password '${DB_APP_PASSWORD}' login;
+create database "${DB_APP_VALINTAREKISTERI_DB}" encoding 'UTF-8' lc_collate 'C' lc_ctype 'C' TEMPLATE template0;
+grant all privileges on database "${DB_APP_VALINTAREKISTERI_DB}" to "${DB_APP_USER}";
+create database "${DB_APP_SIJOITTELU_DB}" encoding 'UTF-8' lc_collate 'C' lc_ctype 'C' TEMPLATE template0;
+grant all privileges on database "${DB_APP_SIJOITTELU_DB}" to "${DB_APP_USER}";
+END
+
+psql "${DB_APP_VALINTAREKISTERI_DB}" -c "ALTER SCHEMA \"public\" OWNER TO \"${DB_APP_USER}\"" \
+ -c "GRANT ALL ON SCHEMA \"public\" TO \"${DB_APP_USER}\""
+psql "${DB_APP_SIJOITTELU_DB}" -c "ALTER SCHEMA \"public\" OWNER TO \"${DB_APP_USER}\"" \
+ -c "GRANT ALL ON SCHEMA \"public\" TO \"${DB_APP_USER}\""
\ No newline at end of file
diff --git a/sijoittelu-service/postgresql/docker-compose.yml b/sijoittelu-service/postgresql/docker-compose.yml
new file mode 100644
index 000000000..ffb6e27d9
--- /dev/null
+++ b/sijoittelu-service/postgresql/docker-compose.yml
@@ -0,0 +1,10 @@
+version: '3.2'
+services:
+ db:
+ container_name: "sijoittelu-postgres"
+ environment:
+ - POSTGRES_PASSWORD="postgres"
+ build:
+ context: "."
+ ports:
+ - "5433:5432"
diff --git a/sijoittelu-service/postgresql/docker/Dockerfile b/sijoittelu-service/postgresql/docker/Dockerfile
deleted file mode 100644
index 90503acc9..000000000
--- a/sijoittelu-service/postgresql/docker/Dockerfile
+++ /dev/null
@@ -1,6 +0,0 @@
-# Based on
-
-FROM postgres:12.12
-
-COPY ./configure-postgres.sh /docker-entrypoint-initdb.d/
-COPY configure-sijoittelu-database.sh /docker-entrypoint-initdb.d/
\ No newline at end of file
diff --git a/sijoittelu-service/postgresql/docker/configure-postgres.sh b/sijoittelu-service/postgresql/docker/configure-postgres.sh
deleted file mode 100644
index f6f3ba320..000000000
--- a/sijoittelu-service/postgresql/docker/configure-postgres.sh
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/usr/bin/env bash
-
-set -euo pipefail
-
-echo "Configuring PostgreSQL to log database modification statements…"
-
-cat <> /var/lib/postgresql/data/postgresql.conf
-log_destination = 'stderr'
-log_line_prefix = '%t %u '
-log_statement = 'mod'
-log_timezone = 'Europe/Helsinki'
-max_connections = 100
-shared_buffers = 128MB
-datestyle = 'iso, mdy'
-timezone = 'Europe/Helsinki'
-lc_messages = 'en_US.UTF-8'
-lc_monetary = 'en_US.UTF-8'
-lc_numeric = 'en_US.UTF-8'
-lc_time = 'en_US.UTF-8'
-default_text_search_config = 'pg_catalog.english'
-END
diff --git a/sijoittelu-service/postgresql/docker/configure-sijoittelu-database.sh b/sijoittelu-service/postgresql/docker/configure-sijoittelu-database.sh
deleted file mode 100755
index b5d65c8b2..000000000
--- a/sijoittelu-service/postgresql/docker/configure-sijoittelu-database.sh
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/usr/bin/env bash
-
-set -euo pipefail
-
-DB_APP_DB=sijoittelu
-DB_APP_USER=oph
-DB_APP_PASSWORD=oph
-
-echo "Creating database \"$DB_APP_DB\", creating role \"$DB_APP_USER\" with database owner privileges…"
-
-psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-END
-create role "${DB_APP_USER}" with password '${DB_APP_PASSWORD}' login;
-create database "${DB_APP_DB}" encoding 'UTF-8' lc_collate 'C' lc_ctype 'C' TEMPLATE template0;
-grant all privileges on database "${DB_APP_DB}" to "${DB_APP_USER}";
-END
-
-psql "${DB_APP_DB}" -c "ALTER SCHEMA \"public\" OWNER TO \"${DB_APP_USER}\"" \
- -c "GRANT ALL ON SCHEMA \"public\" TO \"${DB_APP_USER}\""
\ No newline at end of file
diff --git a/sijoittelu-service/postgresql/init_it_postgresql.sql b/sijoittelu-service/postgresql/init_it_postgresql.sql
deleted file mode 100644
index 20d126584..000000000
--- a/sijoittelu-service/postgresql/init_it_postgresql.sql
+++ /dev/null
@@ -1,4 +0,0 @@
-CREATE ROLE oph;
-ALTER ROLE oph WITH login;
-ALTER SCHEMA public OWNER TO oph;
-GRANT ALL ON SCHEMA public TO oph;
diff --git a/sijoittelu-service/postgresql/postgresql.conf b/sijoittelu-service/postgresql/postgresql.conf
deleted file mode 100644
index e32987221..000000000
--- a/sijoittelu-service/postgresql/postgresql.conf
+++ /dev/null
@@ -1,614 +0,0 @@
-# -----------------------------
-# PostgreSQL configuration file
-# -----------------------------
-#
-# This file consists of lines of the form:
-#
-# name = value
-#
-# (The "=" is optional.) Whitespace may be used. Comments are introduced with
-# "#" anywhere on a line. The complete list of parameter names and allowed
-# values can be found in the PostgreSQL documentation.
-#
-# The commented-out settings shown in this file represent the default values.
-# Re-commenting a setting is NOT sufficient to revert it to the default value;
-# you need to reload the server.
-#
-# This file is read on server startup and when the server receives a SIGHUP
-# signal. If you edit the file on a running system, you have to SIGHUP the
-# server for the changes to take effect, or use "pg_ctl reload". Some
-# parameters, which are marked below, require a server shutdown and restart to
-# take effect.
-#
-# Any parameter can also be given as a command-line option to the server, e.g.,
-# "postgres -c log_connections=on". Some parameters can be changed at run time
-# with the "SET" SQL command.
-#
-# Memory units: kB = kilobytes Time units: ms = milliseconds
-# MB = megabytes s = seconds
-# GB = gigabytes min = minutes
-# TB = terabytes h = hours
-# d = days
-
-
-#------------------------------------------------------------------------------
-# FILE LOCATIONS
-#------------------------------------------------------------------------------
-
-# The default values of these variables are driven from the -D command-line
-# option or PGDATA environment variable, represented here as ConfigDir.
-
-#data_directory = 'ConfigDir' # use data in another directory
-# (change requires restart)
-#hba_file = 'ConfigDir/pg_hba.conf' # host-based authentication file
-# (change requires restart)
-#ident_file = 'ConfigDir/pg_ident.conf' # ident configuration file
-# (change requires restart)
-
-# If external_pid_file is not explicitly set, no extra PID file is written.
-#external_pid_file = '' # write an extra PID file
-# (change requires restart)
-
-
-#------------------------------------------------------------------------------
-# CONNECTIONS AND AUTHENTICATION
-#------------------------------------------------------------------------------
-
-# - Connection Settings -
-
-#listen_addresses = 'localhost' # what IP address(es) to listen on;
-# comma-separated list of addresses;
-# defaults to 'localhost'; use '*' for all
-# (change requires restart)
-#port = 5432 # (change requires restart)
-max_connections = 100 # (change requires restart)
-# Note: Increasing max_connections costs ~400 bytes of shared memory per
-# connection slot, plus lock space (see max_locks_per_transaction).
-#superuser_reserved_connections = 3 # (change requires restart)
-#unix_socket_directories = '/tmp' # comma-separated list of directories
-# (change requires restart)
-#unix_socket_group = '' # (change requires restart)
-#unix_socket_permissions = 0777 # begin with 0 to use octal notation
-# (change requires restart)
-#bonjour = off # advertise server via Bonjour
-# (change requires restart)
-#bonjour_name = '' # defaults to the computer name
-# (change requires restart)
-
-# - Security and Authentication -
-
-#authentication_timeout = 1min # 1s-600s
-#ssl = off # (change requires restart)
-#ssl_ciphers = 'HIGH:MEDIUM:+3DES:!aNULL' # allowed SSL ciphers
-# (change requires restart)
-#ssl_prefer_server_ciphers = on # (change requires restart)
-#ssl_ecdh_curve = 'prime256v1' # (change requires restart)
-#ssl_renegotiation_limit = 512MB # amount of data between renegotiations
-#ssl_cert_file = 'server.crt' # (change requires restart)
-#ssl_key_file = 'server.key' # (change requires restart)
-#ssl_ca_file = '' # (change requires restart)
-#ssl_crl_file = '' # (change requires restart)
-#password_encryption = on
-#db_user_namespace = off
-
-# GSSAPI using Kerberos
-#krb_server_keyfile = ''
-#krb_caseins_users = off
-
-# - TCP Keepalives -
-# see "man 7 tcp" for details
-
-#tcp_keepalives_idle = 0 # TCP_KEEPIDLE, in seconds;
-# 0 selects the system default
-#tcp_keepalives_interval = 0 # TCP_KEEPINTVL, in seconds;
-# 0 selects the system default
-#tcp_keepalives_count = 0 # TCP_KEEPCNT;
-# 0 selects the system default
-
-
-#------------------------------------------------------------------------------
-# RESOURCE USAGE (except WAL)
-#------------------------------------------------------------------------------
-
-# - Memory -
-
-shared_buffers = 128MB # min 128kB
-# (change requires restart)
-#huge_pages = try # on, off, or try
-# (change requires restart)
-#temp_buffers = 8MB # min 800kB
-#max_prepared_transactions = 0 # zero disables the feature
-# (change requires restart)
-# Note: Increasing max_prepared_transactions costs ~600 bytes of shared memory
-# per transaction slot, plus lock space (see max_locks_per_transaction).
-# It is not advisable to set max_prepared_transactions nonzero unless you
-# actively intend to use prepared transactions.
-#work_mem = 4MB # min 64kB
-#maintenance_work_mem = 64MB # min 1MB
-#autovacuum_work_mem = -1 # min 1MB, or -1 to use maintenance_work_mem
-#max_stack_depth = 2MB # min 100kB
-#dynamic_shared_memory_type = posix # the default is the first option
-# supported by the operating system:
-# posix
-# sysv
-# windows
-# mmap
-# use none to disable dynamic shared memory
-
-# - Disk -
-
-#temp_file_limit = -1 # limits per-session temp file space
-# in kB, or -1 for no limit
-
-# - Kernel Resource Usage -
-
-#max_files_per_process = 1000 # min 25
-# (change requires restart)
-#shared_preload_libraries = '' # (change requires restart)
-
-# - Cost-Based Vacuum Delay -
-
-#vacuum_cost_delay = 0 # 0-100 milliseconds
-#vacuum_cost_page_hit = 1 # 0-10000 credits
-#vacuum_cost_page_miss = 10 # 0-10000 credits
-#vacuum_cost_page_dirty = 20 # 0-10000 credits
-#vacuum_cost_limit = 200 # 1-10000 credits
-
-# - Background Writer -
-
-#bgwriter_delay = 200ms # 10-10000ms between rounds
-#bgwriter_lru_maxpages = 100 # 0-1000 max buffers written/round
-#bgwriter_lru_multiplier = 2.0 # 0-10.0 multipler on buffers scanned/round
-
-# - Asynchronous Behavior -
-
-#effective_io_concurrency = 1 # 1-1000; 0 disables prefetching
-#max_worker_processes = 8
-
-
-#------------------------------------------------------------------------------
-# WRITE AHEAD LOG
-#------------------------------------------------------------------------------
-
-# - Settings -
-
-#wal_level = minimal # minimal, archive, hot_standby, or logical
-# (change requires restart)
-#fsync = on # turns forced synchronization on or off
-#synchronous_commit = on # synchronization level;
-# off, local, remote_write, or on
-#wal_sync_method = fsync # the default is the first option
-# supported by the operating system:
-# open_datasync
-# fdatasync (default on Linux)
-# fsync
-# fsync_writethrough
-# open_sync
-#full_page_writes = on # recover from partial page writes
-#wal_log_hints = off # also do full page writes of non-critical updates
-# (change requires restart)
-#wal_buffers = -1 # min 32kB, -1 sets based on shared_buffers
-# (change requires restart)
-#wal_writer_delay = 200ms # 1-10000 milliseconds
-
-#commit_delay = 0 # range 0-100000, in microseconds
-#commit_siblings = 5 # range 1-1000
-
-# - Checkpoints -
-
-#checkpoint_segments = 3 # in logfile segments, min 1, 16MB each
-#checkpoint_timeout = 5min # range 30s-1h
-#checkpoint_completion_target = 0.5 # checkpoint target duration, 0.0 - 1.0
-#checkpoint_warning = 30s # 0 disables
-
-# - Archiving -
-
-#archive_mode = off # allows archiving to be done
-# (change requires restart)
-#archive_command = '' # command to use to archive a logfile segment
-# placeholders: %p = path of file to archive
-# %f = file name only
-# e.g. 'test ! -f /mnt/server/archivedir/%f && cp %p /mnt/server/archivedir/%f'
-#archive_timeout = 0 # force a logfile segment switch after this
-# number of seconds; 0 disables
-
-
-#------------------------------------------------------------------------------
-# REPLICATION
-#------------------------------------------------------------------------------
-
-# - Sending Server(s) -
-
-# Set these on the master and on any standby that will send replication data.
-
-#max_wal_senders = 0 # max number of walsender processes
-# (change requires restart)
-#wal_keep_segments = 0 # in logfile segments, 16MB each; 0 disables
-#wal_sender_timeout = 60s # in milliseconds; 0 disables
-
-#max_replication_slots = 0 # max number of replication slots
-# (change requires restart)
-
-# - Master Server -
-
-# These settings are ignored on a standby server.
-
-#synchronous_standby_names = '' # standby servers that provide sync rep
-# comma-separated list of application_name
-# from standby(s); '*' = all
-#vacuum_defer_cleanup_age = 0 # number of xacts by which cleanup is delayed
-
-# - Standby Servers -
-
-# These settings are ignored on a master server.
-
-#hot_standby = off # "on" allows queries during recovery
-# (change requires restart)
-#max_standby_archive_delay = 30s # max delay before canceling queries
-# when reading WAL from archive;
-# -1 allows indefinite delay
-#max_standby_streaming_delay = 30s # max delay before canceling queries
-# when reading streaming WAL;
-# -1 allows indefinite delay
-#wal_receiver_status_interval = 10s # send replies at least this often
-# 0 disables
-#hot_standby_feedback = off # send info from standby to prevent
-# query conflicts
-#wal_receiver_timeout = 60s # time that receiver waits for
-# communication from master
-# in milliseconds; 0 disables
-
-
-#------------------------------------------------------------------------------
-# QUERY TUNING
-#------------------------------------------------------------------------------
-
-# - Planner Method Configuration -
-
-#enable_bitmapscan = on
-#enable_hashagg = on
-#enable_hashjoin = on
-#enable_indexscan = on
-#enable_indexonlyscan = on
-#enable_material = on
-#enable_mergejoin = on
-#enable_nestloop = on
-#enable_seqscan = on
-#enable_sort = on
-#enable_tidscan = on
-
-# - Planner Cost Constants -
-
-#seq_page_cost = 1.0 # measured on an arbitrary scale
-#random_page_cost = 4.0 # same scale as above
-#cpu_tuple_cost = 0.01 # same scale as above
-#cpu_index_tuple_cost = 0.005 # same scale as above
-#cpu_operator_cost = 0.0025 # same scale as above
-#effective_cache_size = 4GB
-
-# - Genetic Query Optimizer -
-
-#geqo = on
-#geqo_threshold = 12
-#geqo_effort = 5 # range 1-10
-#geqo_pool_size = 0 # selects default based on effort
-#geqo_generations = 0 # selects default based on effort
-#geqo_selection_bias = 2.0 # range 1.5-2.0
-#geqo_seed = 0.0 # range 0.0-1.0
-
-# - Other Planner Options -
-
-#default_statistics_target = 100 # range 1-10000
-#constraint_exclusion = partition # on, off, or partition
-#cursor_tuple_fraction = 0.1 # range 0.0-1.0
-#from_collapse_limit = 8
-#join_collapse_limit = 8 # 1 disables collapsing of explicit
-# JOIN clauses
-
-
-#------------------------------------------------------------------------------
-# ERROR REPORTING AND LOGGING
-#------------------------------------------------------------------------------
-
-# - Where to Log -
-
-#log_destination = 'stderr' # Valid values are combinations of
-# stderr, csvlog, syslog, and eventlog,
-# depending on platform. csvlog
-# requires logging_collector to be on.
-
-# This is used when logging to stderr:
-#logging_collector = off # Enable capturing of stderr and csvlog
-# into log files. Required to be on for
-# csvlogs.
-# (change requires restart)
-
-# These are only used if logging_collector is on:
-#log_directory = 'pg_log' # directory where log files are written,
-# can be absolute or relative to PGDATA
-#log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' # log file name pattern,
-# can include strftime() escapes
-#log_file_mode = 0600 # creation mode for log files,
-# begin with 0 to use octal notation
-#log_truncate_on_rotation = off # If on, an existing log file with the
-# same name as the new log file will be
-# truncated rather than appended to.
-# But such truncation only occurs on
-# time-driven rotation, not on restarts
-# or size-driven rotation. Default is
-# off, meaning append to existing files
-# in all cases.
-#log_rotation_age = 1d # Automatic rotation of logfiles will
-# happen after that time. 0 disables.
-#log_rotation_size = 10MB # Automatic rotation of logfiles will
-# happen after that much log output.
-# 0 disables.
-
-# These are relevant when logging to syslog:
-#syslog_facility = 'LOCAL0'
-#syslog_ident = 'postgres'
-
-# This is only relevant when logging to eventlog (win32):
-#event_source = 'PostgreSQL'
-
-# - When to Log -
-
-#client_min_messages = notice # values in order of decreasing detail:
-# debug5
-# debug4
-# debug3
-# debug2
-# debug1
-# log
-# notice
-# warning
-# error
-
-#log_min_messages = warning # values in order of decreasing detail:
-# debug5
-# debug4
-# debug3
-# debug2
-# debug1
-# info
-# notice
-# warning
-# error
-# log
-# fatal
-# panic
-
-#log_min_error_statement = error # values in order of decreasing detail:
-# debug5
-# debug4
-# debug3
-# debug2
-# debug1
-# info
-# notice
-# warning
-# error
-# log
-# fatal
-# panic (effectively off)
-
-#log_min_duration_statement = -1 # -1 is disabled, 0 logs all statements
-# and their durations, > 0 logs only
-# statements running at least this number
-# of milliseconds
-
-
-# - What to Log -
-
-#debug_print_parse = off
-#debug_print_rewritten = off
-#debug_print_plan = off
-#debug_pretty_print = on
-#log_checkpoints = off
-#log_connections = off
-#log_disconnections = off
-#log_duration = off
-#log_error_verbosity = default # terse, default, or verbose messages
-#log_hostname = off
-#log_line_prefix = '' # special values:
-# %a = application name
-# %u = user name
-# %d = database name
-# %r = remote host and port
-# %h = remote host
-# %p = process ID
-# %t = timestamp without milliseconds
-# %m = timestamp with milliseconds
-# %i = command tag
-# %e = SQL state
-# %c = session ID
-# %l = session line number
-# %s = session start timestamp
-# %v = virtual transaction ID
-# %x = transaction ID (0 if none)
-# %q = stop here in non-session
-# processes
-# %% = '%'
-# e.g. '<%u%%%d> '
-#log_lock_waits = off # log lock waits >= deadlock_timeout
-#log_statement = 'none' # none, ddl, mod, all
-#log_temp_files = -1 # log temporary files equal or larger
-# than the specified size in kilobytes;
-# -1 disables, 0 logs all temp files
-log_timezone = 'Europe/Helsinki'
-
-
-#------------------------------------------------------------------------------
-# RUNTIME STATISTICS
-#------------------------------------------------------------------------------
-
-# - Query/Index Statistics Collector -
-
-#track_activities = on
-#track_counts = on
-#track_io_timing = off
-#track_functions = none # none, pl, all
-#track_activity_query_size = 1024 # (change requires restart)
-#update_process_title = on
-#stats_temp_directory = 'pg_stat_tmp'
-
-
-# - Statistics Monitoring -
-
-#log_parser_stats = off
-#log_planner_stats = off
-#log_executor_stats = off
-#log_statement_stats = off
-
-
-#------------------------------------------------------------------------------
-# AUTOVACUUM PARAMETERS
-#------------------------------------------------------------------------------
-
-#autovacuum = on # Enable autovacuum subprocess? 'on'
-# requires track_counts to also be on.
-#log_autovacuum_min_duration = -1 # -1 disables, 0 logs all actions and
-# their durations, > 0 logs only
-# actions running at least this number
-# of milliseconds.
-#autovacuum_max_workers = 3 # max number of autovacuum subprocesses
-# (change requires restart)
-#autovacuum_naptime = 1min # time between autovacuum runs
-#autovacuum_vacuum_threshold = 50 # min number of row updates before
-# vacuum
-#autovacuum_analyze_threshold = 50 # min number of row updates before
-# analyze
-#autovacuum_vacuum_scale_factor = 0.2 # fraction of table size before vacuum
-#autovacuum_analyze_scale_factor = 0.1 # fraction of table size before analyze
-#autovacuum_freeze_max_age = 200000000 # maximum XID age before forced vacuum
-# (change requires restart)
-#autovacuum_multixact_freeze_max_age = 400000000 # maximum multixact age
-# before forced vacuum
-# (change requires restart)
-#autovacuum_vacuum_cost_delay = 20ms # default vacuum cost delay for
-# autovacuum, in milliseconds;
-# -1 means use vacuum_cost_delay
-#autovacuum_vacuum_cost_limit = -1 # default vacuum cost limit for
-# autovacuum, -1 means use
-# vacuum_cost_limit
-
-
-#------------------------------------------------------------------------------
-# CLIENT CONNECTION DEFAULTS
-#------------------------------------------------------------------------------
-
-# - Statement Behavior -
-
-#search_path = '"$user",public' # schema names
-#default_tablespace = '' # a tablespace name, '' uses the default
-#temp_tablespaces = '' # a list of tablespace names, '' uses
-# only default tablespace
-#check_function_bodies = on
-#default_transaction_isolation = 'read committed'
-#default_transaction_read_only = off
-#default_transaction_deferrable = off
-#session_replication_role = 'origin'
-#statement_timeout = 0 # in milliseconds, 0 is disabled
-#lock_timeout = 0 # in milliseconds, 0 is disabled
-#vacuum_freeze_min_age = 50000000
-#vacuum_freeze_table_age = 150000000
-#vacuum_multixact_freeze_min_age = 5000000
-#vacuum_multixact_freeze_table_age = 150000000
-#bytea_output = 'hex' # hex, escape
-#xmlbinary = 'base64'
-#xmloption = 'content'
-
-# - Locale and Formatting -
-
-datestyle = 'iso, mdy'
-#intervalstyle = 'postgres'
-timezone = 'Europe/Helsinki'
-#timezone_abbreviations = 'Default' # Select the set of available time zone
-# abbreviations. Currently, there are
-# Default
-# Australia (historical usage)
-# India
-# You can create your own file in
-# share/timezonesets/.
-#extra_float_digits = 0 # min -15, max 3
-#client_encoding = sql_ascii # actually, defaults to database
-# encoding
-
-# These settings are initialized by initdb, but they can be changed.
-lc_messages = 'en_US.UTF-8' # locale for system error message
-# strings
-lc_monetary = 'en_US.UTF-8' # locale for monetary formatting
-lc_numeric = 'en_US.UTF-8' # locale for number formatting
-lc_time = 'en_US.UTF-8' # locale for time formatting
-
-# default configuration for text search
-default_text_search_config = 'pg_catalog.english'
-
-# - Other Defaults -
-
-#dynamic_library_path = '$libdir'
-#local_preload_libraries = ''
-#session_preload_libraries = ''
-
-
-#------------------------------------------------------------------------------
-# LOCK MANAGEMENT
-#------------------------------------------------------------------------------
-
-#deadlock_timeout = 1s
-#max_locks_per_transaction = 64 # min 10
-# (change requires restart)
-# Note: Each lock table slot uses ~270 bytes of shared memory, and there are
-# max_locks_per_transaction * (max_connections + max_prepared_transactions)
-# lock table slots.
-#max_pred_locks_per_transaction = 64 # min 10
-# (change requires restart)
-
-
-#------------------------------------------------------------------------------
-# VERSION/PLATFORM COMPATIBILITY
-#------------------------------------------------------------------------------
-
-# - Previous PostgreSQL Versions -
-
-#array_nulls = on
-#backslash_quote = safe_encoding # on, off, or safe_encoding
-#default_with_oids = off
-#escape_string_warning = on
-#lo_compat_privileges = off
-#quote_all_identifiers = off
-#sql_inheritance = on
-#standard_conforming_strings = on
-#synchronize_seqscans = on
-
-# - Other Platforms and Clients -
-
-#transform_null_equals = off
-
-
-#------------------------------------------------------------------------------
-# ERROR HANDLING
-#------------------------------------------------------------------------------
-
-#exit_on_error = off # terminate session on any error?
-#restart_after_crash = on # reinitialize after backend crash?
-
-
-#------------------------------------------------------------------------------
-# CONFIG FILE INCLUDES
-#------------------------------------------------------------------------------
-
-# These options allow settings to be loaded from files other than the
-# default postgresql.conf.
-
-#include_dir = 'conf.d' # include files ending in '.conf' from
-# directory 'conf.d'
-#include_if_exists = 'exists.conf' # include file only if it exists
-#include = 'special.conf' # include file
-
-
-#------------------------------------------------------------------------------
-# CUSTOMIZED OPTIONS
-#------------------------------------------------------------------------------
-
-# Add settings for extensions here
diff --git a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/App.java b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/App.java
index ce1370b18..f2cb83743 100644
--- a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/App.java
+++ b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/App.java
@@ -2,9 +2,10 @@
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
-@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
+@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class, FlywayAutoConfiguration.class })
public class App {
public static final String CONTEXT_PATH = "/sijoittelu-service";
diff --git a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/laskenta/configuration/AccessLogConfiguration.java b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/configuration/AccessLogConfiguration.java
similarity index 96%
rename from sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/laskenta/configuration/AccessLogConfiguration.java
rename to sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/configuration/AccessLogConfiguration.java
index a450ebd1f..6995d1b96 100644
--- a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/laskenta/configuration/AccessLogConfiguration.java
+++ b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/configuration/AccessLogConfiguration.java
@@ -1,4 +1,4 @@
-package fi.vm.sade.sijoittelu.laskenta.configuration;
+package fi.vm.sade.sijoittelu.configuration;
import ch.qos.logback.access.tomcat.LogbackValve;
import org.springframework.beans.factory.annotation.Value;
diff --git a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/laskenta/configuration/ExternalConfiguration.java b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/configuration/ExternalConfiguration.java
similarity index 98%
rename from sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/laskenta/configuration/ExternalConfiguration.java
rename to sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/configuration/ExternalConfiguration.java
index 0a23691e8..2d4ad9821 100644
--- a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/laskenta/configuration/ExternalConfiguration.java
+++ b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/configuration/ExternalConfiguration.java
@@ -1,4 +1,4 @@
-package fi.vm.sade.sijoittelu.laskenta.configuration;
+package fi.vm.sade.sijoittelu.configuration;
import fi.vm.sade.sijoittelu.domain.Valintatulos;
import fi.vm.sade.sijoittelu.domain.VastaanotettavuusDTO;
diff --git a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/configuration/FlywayConfiguration.java b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/configuration/FlywayConfiguration.java
new file mode 100644
index 000000000..f59d27f36
--- /dev/null
+++ b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/configuration/FlywayConfiguration.java
@@ -0,0 +1,52 @@
+package fi.vm.sade.sijoittelu.configuration;
+
+import fi.vm.sade.sijoittelu.flyway.V20240419000001__LueJatkuvatSijoittelutSeurannasta;
+import fi.vm.sade.sijoittelu.jatkuva.external.resource.viestintapalvelu.RestCasClient;
+import fi.vm.sade.sijoittelu.laskenta.util.UrlProperties;
+import org.flywaydb.core.Flyway;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.env.Environment;
+
+import javax.sql.DataSource;
+import java.util.Arrays;
+
+@Configuration
+public class FlywayConfiguration {
+
+ @Autowired
+ @Qualifier("sijoitteluDataSource")
+ DataSource sijoitteluDataSource;
+
+ @Autowired(required = false)
+ @Qualifier("SeurantaCasClient")
+ RestCasClient seurantaCasClient;
+
+ @Autowired
+ UrlProperties urlProperties;
+
+ @Autowired
+ Environment environment;
+
+ public static class FlywayMigrationDone {}
+
+ private boolean isTest() {
+ return Arrays.stream(environment.getActiveProfiles()).filter(p -> p.equals("test")).findFirst().isPresent();
+ }
+
+ @Bean
+ public FlywayMigrationDone doFlywayMigration() {
+ V20240419000001__LueJatkuvatSijoittelutSeurannasta.setDependencies(this.urlProperties, this.seurantaCasClient, isTest());
+
+ Flyway flyway = Flyway.configure()
+ .schemas("public")
+ .dataSource(this.sijoitteluDataSource)
+ .locations("/db/migration", "fi/vm/sade/sijoittelu/flyway")
+ .load();
+ flyway.migrate();
+
+ return new FlywayMigrationDone();
+ }
+}
diff --git a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/laskenta/configuration/PropertyConfiguration.java b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/configuration/PropertyConfiguration.java
similarity index 88%
rename from sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/laskenta/configuration/PropertyConfiguration.java
rename to sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/configuration/PropertyConfiguration.java
index 16d81a522..59f567c35 100644
--- a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/laskenta/configuration/PropertyConfiguration.java
+++ b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/configuration/PropertyConfiguration.java
@@ -1,4 +1,4 @@
-package fi.vm.sade.sijoittelu.laskenta.configuration;
+package fi.vm.sade.sijoittelu.configuration;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
diff --git a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/laskenta/configuration/SecurityConfiguration.java b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/configuration/SecurityConfiguration.java
similarity index 99%
rename from sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/laskenta/configuration/SecurityConfiguration.java
rename to sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/configuration/SecurityConfiguration.java
index 132dcca43..1f289fd90 100644
--- a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/laskenta/configuration/SecurityConfiguration.java
+++ b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/configuration/SecurityConfiguration.java
@@ -1,4 +1,4 @@
-package fi.vm.sade.sijoittelu.laskenta.configuration;
+package fi.vm.sade.sijoittelu.configuration;
import fi.vm.sade.java_utils.security.OpintopolkuCasAuthenticationFilter;
import fi.vm.sade.javautils.kayttooikeusclient.OphUserDetailsServiceImpl;
diff --git a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/configuration/SijoitteluDatabaseConfiguration.java b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/configuration/SijoitteluDatabaseConfiguration.java
new file mode 100644
index 000000000..0ee5a91f0
--- /dev/null
+++ b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/configuration/SijoitteluDatabaseConfiguration.java
@@ -0,0 +1,40 @@
+package fi.vm.sade.sijoittelu.configuration;
+
+import com.zaxxer.hikari.HikariConfig;
+import com.zaxxer.hikari.HikariDataSource;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.jdbc.core.JdbcTemplate;
+
+import javax.sql.DataSource;
+import java.util.*;
+
+@Configuration
+public class SijoitteluDatabaseConfiguration {
+
+ @Bean("sijoitteluDataSource")
+ public DataSource sijoitteluDataSource(
+ @Value("${sijoittelu.sijoittelu.postgresql.url}") final String url,
+ @Value("${sijoittelu.sijoittelu.postgresql.username}") final String user,
+ @Value("${sijoittelu.sijoittelu.postgresql.password}") final String password,
+ @Value("${sijoittelu.sijoittelu.postgresql.driver}") final String driverClassName) {
+ final HikariConfig config = new HikariConfig();
+ config.setConnectionTestQuery("SELECT 1");
+ config.setJdbcUrl(url);
+ final Properties dsProperties = new Properties();
+ dsProperties.setProperty("url", url);
+ dsProperties.setProperty("user", user);
+ dsProperties.setProperty("password", password);
+ config.setDataSourceProperties(dsProperties);
+ if(!driverClassName.equals("")) config.setDriverClassName(driverClassName);
+ return new HikariDataSource(config);
+ }
+
+ @Bean("sijoitteluJdbcTemplate")
+ JdbcTemplate sijoitteluJdbcTemplate(
+ @Qualifier("sijoitteluDataSource") DataSource sijoitteluDataSource) {
+ return new JdbcTemplate(sijoitteluDataSource);
+ }
+}
diff --git a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/sijoittelu/route/impl/SijoitteluRouteConfig.java b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/configuration/SijoitteluRouteConfig.java
similarity index 57%
rename from sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/sijoittelu/route/impl/SijoitteluRouteConfig.java
rename to sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/configuration/SijoitteluRouteConfig.java
index b5f217771..98b1f6c9b 100644
--- a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/sijoittelu/route/impl/SijoitteluRouteConfig.java
+++ b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/configuration/SijoitteluRouteConfig.java
@@ -1,27 +1,31 @@
-package fi.vm.sade.sijoittelu.jatkuva.sijoittelu.route.impl;
+package fi.vm.sade.sijoittelu.configuration;
-import fi.vm.sade.sijoittelu.jatkuva.external.resource.seuranta.SijoitteluSeurantaResource;
+import fi.vm.sade.sijoittelu.jatkuva.dao.JatkuvaSijoitteluDAO;
+import fi.vm.sade.sijoittelu.jatkuva.service.impl.JatkuvaSijoitteluServiceImpl;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;
-@Profile("default")
+@Profile({"default", "dev"})
@Configuration
public class SijoitteluRouteConfig {
@Bean
- public JatkuvaSijoitteluRouteImpl getJatkuvaSijoitteluRouteImpl(
+ public JatkuvaSijoitteluServiceImpl getJatkuvaSijoitteluRouteImpl(
+ // riippuvuus Flyway-migraatioihin jotta tätä beania ei luoda ennen kuin jatkuvien sijoitteluiden migraatio
+ // seurantapalvelusta ajettu. Tämän voin refaktoroida pois kun migraatio onnistuneesti suoritettu.
+ FlywayConfiguration.FlywayMigrationDone flywayMigrationDone,
@Value("${jatkuvasijoittelu.autostart:true}") boolean autoStartup,
@Value("${valintalaskentakoostepalvelu.jatkuvasijoittelu.intervalMinutes:5}")
long jatkuvaSijoitteluPollIntervalInMinutes,
- SijoitteluSeurantaResource sijoitteluSeurantaResource,
+ JatkuvaSijoitteluDAO jatkuvaSijoitteluDAO,
SchedulerFactoryBean schedulerFactoryBean) {
- return new JatkuvaSijoitteluRouteImpl(
+ return new JatkuvaSijoitteluServiceImpl(
autoStartup,
jatkuvaSijoitteluPollIntervalInMinutes,
- sijoitteluSeurantaResource,
+ jatkuvaSijoitteluDAO,
schedulerFactoryBean);
}
diff --git a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/laskenta/configuration/SijoitteluServiceConfiguration.java b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/configuration/SijoitteluServiceConfiguration.java
similarity index 97%
rename from sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/laskenta/configuration/SijoitteluServiceConfiguration.java
rename to sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/configuration/SijoitteluServiceConfiguration.java
index 3ff8539f1..be11e734a 100644
--- a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/laskenta/configuration/SijoitteluServiceConfiguration.java
+++ b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/configuration/SijoitteluServiceConfiguration.java
@@ -1,4 +1,4 @@
-package fi.vm.sade.sijoittelu.laskenta.configuration;
+package fi.vm.sade.sijoittelu.configuration;
import fi.vm.sade.auditlog.ApplicationType;
import fi.vm.sade.auditlog.Audit;
@@ -53,5 +53,4 @@ public void addCorsMappings(CorsRegistry registry) {
}
};
}
-
}
diff --git a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/laskenta/configuration/DatabaseConfiguration.java b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/configuration/ValintalaskentaDatabaseConfiguration.java
similarity index 88%
rename from sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/laskenta/configuration/DatabaseConfiguration.java
rename to sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/configuration/ValintalaskentaDatabaseConfiguration.java
index da51d5e0f..3b4ee687a 100644
--- a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/laskenta/configuration/DatabaseConfiguration.java
+++ b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/configuration/ValintalaskentaDatabaseConfiguration.java
@@ -1,4 +1,4 @@
-package fi.vm.sade.sijoittelu.laskenta.configuration;
+package fi.vm.sade.sijoittelu.configuration;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
@@ -8,6 +8,7 @@
import fi.vm.sade.valintalaskenta.domain.valinta.JarjestyskriteeritulosContainer;
import fi.vm.sade.valintalaskenta.domain.valinta.SyotettyArvoContainer;
import org.postgresql.util.PGobject;
+import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
@@ -38,18 +39,18 @@
},
transactionManagerRef = "valintaLaskentaTransactionManager",
jdbcOperationsRef = "valintalaskentaNamedParameterJdbcOperations")
-public class DatabaseConfiguration extends AbstractJdbcConfiguration {
+public class ValintalaskentaDatabaseConfiguration extends AbstractJdbcConfiguration {
private final ApplicationContext applicationContext;
private static final List> JSON_CLASSES =
asList(SyotettyArvoContainer.class, FunktioTulosContainer.class, JarjestyskriteeritulosContainer.class);
- DatabaseConfiguration(ApplicationContext applicationContext) {
+ ValintalaskentaDatabaseConfiguration(ApplicationContext applicationContext) {
this.applicationContext = applicationContext;
}
- @Bean
+ @Bean("valintalaskentaDataSource")
public DataSource dataSourceValintalaskenta(
@Value("${sijoittelu.valintalaskenta.postgresql.maxactive}") final String maxPoolSize,
@Value("${sijoittelu.valintalaskenta.postgresql.maxwait}") final String maxWait,
@@ -79,18 +80,20 @@ public DataSource dataSourceValintalaskenta(
return new HikariDataSource(config);
}
- @Bean
- public JdbcTemplate jdbcTemplate(DataSource dataSourceValintalaskenta) {
+ @Bean("valintalaskentaJdbcTemplate")
+ public JdbcTemplate jdbcTemplate(@Qualifier("valintalaskentaDataSource") DataSource dataSourceValintalaskenta) {
return new JdbcTemplate(dataSourceValintalaskenta);
}
- @Bean
- NamedParameterJdbcOperations valintalaskentaNamedParameterJdbcOperations(DataSource dataSourceValintalaskenta) {
+ @Bean("valintalaskentaNamedParameterJdbcOperations")
+ NamedParameterJdbcOperations valintalaskentaNamedParameterJdbcOperations(
+ @Qualifier("valintalaskentaDataSource") DataSource dataSourceValintalaskenta) {
return new NamedParameterJdbcTemplate(dataSourceValintalaskenta);
}
- @Bean
- TransactionManager valintaLaskentaTransactionManager(DataSource dataSourceValintalaskenta) {
+ @Bean("valintaLaskentaTransactionManager")
+ TransactionManager valintaLaskentaTransactionManager(
+ @Qualifier("valintalaskentaDataSource") DataSource dataSourceValintalaskenta) {
return new DataSourceTransactionManager(dataSourceValintalaskenta);
}
diff --git a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/flyway/V20240419000001__LueJatkuvatSijoittelutSeurannasta.java b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/flyway/V20240419000001__LueJatkuvatSijoittelutSeurannasta.java
new file mode 100644
index 000000000..3c8ff15c3
--- /dev/null
+++ b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/flyway/V20240419000001__LueJatkuvatSijoittelutSeurannasta.java
@@ -0,0 +1,74 @@
+package fi.vm.sade.sijoittelu.flyway;
+
+import com.google.gson.reflect.TypeToken;
+import fi.vm.sade.sijoittelu.jatkuva.dto.JatkuvaSijoittelu;
+import fi.vm.sade.sijoittelu.jatkuva.external.resource.viestintapalvelu.RestCasClient;
+import fi.vm.sade.sijoittelu.laskenta.util.UrlProperties;
+import org.flywaydb.core.api.migration.BaseJavaMigration;
+import org.flywaydb.core.api.migration.Context;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.jdbc.datasource.SingleConnectionDataSource;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.regex.Pattern;
+
+public class V20240419000001__LueJatkuvatSijoittelutSeurannasta extends BaseJavaMigration {
+
+ private static final Logger LOG = LoggerFactory.getLogger(V20240419000001__LueJatkuvatSijoittelutSeurannasta.class);
+
+ private static RestCasClient seurantaCasClient;
+ private static UrlProperties urlProperties;
+
+ private static boolean isTest;
+
+ // ainakin hahtuvalla seurantapalvelu antaa ulos osittain täyttä roskaa, joten suodatetaan sijoittelut
+ // joilla validi oid
+ private static final Pattern OID_PATTERN = Pattern.compile("^[0-9]+(\\.[0-9]+)*$");
+
+ public static void setDependencies(UrlProperties properties, RestCasClient client, boolean test) {
+ urlProperties = properties;
+ seurantaCasClient = client;
+ isTest = test;
+ }
+
+ public Collection hae() {
+ try {
+ return seurantaCasClient
+ .get(
+ urlProperties.url("valintalaskentakoostepalvelu.seuranta.rest.url")
+ + "/sijoittelunseuranta/hae",
+ new TypeToken>() {},
+ Collections.emptyMap(),
+ 10 * 60 * 1000)
+ .get();
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @Override
+ public void migrate(Context context) {
+ if(isTest) {
+ LOG.warn("Flyway migration skipped because we are running tests");
+ } else {
+ JdbcTemplate template = new JdbcTemplate();
+ template.setDataSource(new SingleConnectionDataSource(context.getConnection(), true));
+ for(JatkuvaSijoittelu jatkuvaSijoittelu : this.hae()) {
+ if(OID_PATTERN.matcher(jatkuvaSijoittelu.getHakuOid()).matches()) {
+ template.update(
+ "INSERT INTO jatkuvat " +
+ "(haku_oid, jatkuva_paalla, viimeksi_ajettu, aloitus, ajotiheys) " +
+ "VALUES (?, ?, ?::timestamptz, ?::timestamptz, ?)",
+ jatkuvaSijoittelu.getHakuOid(),
+ jatkuvaSijoittelu.isAjossa(),
+ jatkuvaSijoittelu.getViimeksiAjettu(),
+ jatkuvaSijoittelu.getAloitusajankohta(),
+ jatkuvaSijoittelu.getAjotiheys());
+ }
+ }
+ }
+ }
+}
diff --git a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/dao/JatkuvaSijoitteluDAO.java b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/dao/JatkuvaSijoitteluDAO.java
new file mode 100644
index 000000000..0215e67e6
--- /dev/null
+++ b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/dao/JatkuvaSijoitteluDAO.java
@@ -0,0 +1,19 @@
+package fi.vm.sade.sijoittelu.jatkuva.dao;
+
+import fi.vm.sade.sijoittelu.jatkuva.dto.JatkuvaSijoittelu;
+import java.util.Collection;
+
+public interface JatkuvaSijoitteluDAO {
+
+ JatkuvaSijoittelu hae(String hakuOid);
+
+ Collection hae();
+
+ JatkuvaSijoittelu merkkaaSijoittelunAjossaTila(String hakuOid, boolean tila);
+
+ JatkuvaSijoittelu merkkaaSijoittelunAjetuksi(String hakuOid);
+
+ void poistaSijoittelu(String hakuOid);
+
+ void paivitaSijoittelunAloitusajankohta(String hakuOid, long aloitusajankohta, int ajotiheys);
+}
diff --git a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/dao/impl/JatkuvaSijoitteluDAOImpl.java b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/dao/impl/JatkuvaSijoitteluDAOImpl.java
new file mode 100644
index 000000000..91cef9656
--- /dev/null
+++ b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/dao/impl/JatkuvaSijoitteluDAOImpl.java
@@ -0,0 +1,110 @@
+package fi.vm.sade.sijoittelu.jatkuva.dao.impl;
+
+import fi.vm.sade.sijoittelu.jatkuva.dao.JatkuvaSijoitteluDAO;
+
+import java.time.Instant;
+import java.util.*;
+
+import fi.vm.sade.sijoittelu.jatkuva.dto.JatkuvaSijoittelu;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.dao.EmptyResultDataAccessException;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.jdbc.core.RowMapper;
+import org.springframework.stereotype.Service;
+
+@Service
+public class JatkuvaSijoitteluDAOImpl implements JatkuvaSijoitteluDAO {
+
+ private final JdbcTemplate jdbcTemplate;
+
+ private final RowMapper sijoitteluDtoRowMapper = (rs, rowNum) ->
+ new JatkuvaSijoittelu(
+ rs.getString("haku_oid"),
+ rs.getBoolean("jatkuva_paalla"),
+ rs.getTimestamp("viimeksi_ajettu"),
+ null,
+ rs.getTimestamp("aloitus"),
+ rs.getInt("ajotiheys")
+ );
+
+ @Autowired
+ public JatkuvaSijoitteluDAOImpl(@Qualifier("sijoitteluJdbcTemplate") JdbcTemplate jdbcTemplate) {
+ this.jdbcTemplate = jdbcTemplate;
+ }
+
+ @Override
+ public JatkuvaSijoittelu hae(String hakuOid) {
+ try {
+ return jdbcTemplate.queryForObject("SELECT haku_oid, jatkuva_paalla, viimeksi_ajettu, aloitus, ajotiheys FROM jatkuvat WHERE haku_oid=?",
+ sijoitteluDtoRowMapper, hakuOid);
+ } catch (EmptyResultDataAccessException e) {
+ return null;
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @Override
+ public Collection hae() {
+ try {
+ return jdbcTemplate.query("SELECT haku_oid, jatkuva_paalla, viimeksi_ajettu, aloitus, ajotiheys FROM jatkuvat", sijoitteluDtoRowMapper);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @Override
+ public JatkuvaSijoittelu merkkaaSijoittelunAjossaTila(String hakuOid, boolean tila) {
+ try {
+ this.jdbcTemplate.update(
+ "INSERT INTO jatkuvat " +
+ "(haku_oid, jatkuva_paalla, viimeksi_ajettu, aloitus, ajotiheys) " +
+ "VALUES (?, ?, null, null, null) " +
+ "ON CONFLICT (haku_oid) DO UPDATE SET jatkuva_paalla=?",
+ hakuOid, tila, tila);
+ return this.hae(hakuOid);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @Override
+ public JatkuvaSijoittelu merkkaaSijoittelunAjetuksi(String hakuOid) {
+ try {
+ String now = new Date().toString();
+ this.jdbcTemplate.update("INSERT INTO jatkuvat " +
+ "(haku_oid, jatkuva_paalla, viimeksi_ajettu, aloitus, ajotiheys) " +
+ "VALUES (?, false, ?::timestamptz, null, null) " +
+ "ON CONFLICT (haku_oid) DO UPDATE SET viimeksi_ajettu=?::timestamptz",
+ hakuOid, now, now);
+ return this.hae(hakuOid);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @Override
+ public void poistaSijoittelu(String hakuOid) {
+ try {
+ this.jdbcTemplate.update("DELETE FROM jatkuvat WHERE haku_oid=?", hakuOid);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @Override
+ public void paivitaSijoittelunAloitusajankohta(
+ String hakuOid, long aloitusajankohta, int ajotiheys) {
+ try {
+ String aloitus = Date.from(Instant.ofEpochMilli(aloitusajankohta)).toString();
+ this.jdbcTemplate.update("INSERT INTO jatkuvat " +
+ "(haku_oid, jatkuva_paalla, viimeksi_ajettu, aloitus, ajotiheys) " +
+ "VALUES (?, false, null, ?::timestamptz, ?) " +
+ "ON CONFLICT (haku_oid) DO UPDATE SET aloitus=?::timestamptz, ajotiheys=?",
+ hakuOid, aloitus, ajotiheys, aloitus, ajotiheys);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+}
\ No newline at end of file
diff --git a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/sijoittelu/dto/AjastettuSijoitteluInfo.java b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/dto/AjastettuSijoitteluInfo.java
similarity index 91%
rename from sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/sijoittelu/dto/AjastettuSijoitteluInfo.java
rename to sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/dto/AjastettuSijoitteluInfo.java
index 886239813..7866c85de 100644
--- a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/sijoittelu/dto/AjastettuSijoitteluInfo.java
+++ b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/dto/AjastettuSijoitteluInfo.java
@@ -1,4 +1,4 @@
-package fi.vm.sade.sijoittelu.jatkuva.sijoittelu.dto;
+package fi.vm.sade.sijoittelu.jatkuva.dto;
import fi.vm.sade.sijoittelu.jatkuva.util.Formatter;
import java.util.Date;
diff --git a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/dto/JatkuvaSijoittelu.java b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/dto/JatkuvaSijoittelu.java
new file mode 100644
index 000000000..44623af67
--- /dev/null
+++ b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/dto/JatkuvaSijoittelu.java
@@ -0,0 +1,51 @@
+package fi.vm.sade.sijoittelu.jatkuva.dto;
+
+import java.util.Date;
+
+public class JatkuvaSijoittelu {
+
+ private final String hakuOid;
+ private final boolean ajossa;
+ private final Date viimeksiAjettu;
+ private final String virhe;
+ private Date aloitusajankohta;
+ private Integer ajotiheys;
+
+ public JatkuvaSijoittelu() {
+ this.hakuOid = null;
+ this.ajossa = false;
+ this.viimeksiAjettu = null;
+ this.virhe = null;
+ this.aloitusajankohta = null;
+ this.ajotiheys = null;
+ }
+
+ public JatkuvaSijoittelu(String hakuOid, boolean ajossa, Date viimeksiAjettu, String virhe, Date aloitusajankohta, Integer ajotiheys) {
+ this.hakuOid = hakuOid;
+ this.ajossa = ajossa;
+ this.viimeksiAjettu = viimeksiAjettu;
+ this.virhe = virhe;
+ this.aloitusajankohta = aloitusajankohta;
+ this.ajotiheys = ajotiheys;
+ }
+
+ public String getVirhe() { return virhe; }
+
+ public String getHakuOid() {
+ return hakuOid;
+ }
+
+ public Date getViimeksiAjettu() {
+ return viimeksiAjettu;
+ }
+
+ public boolean isAjossa() {
+ return ajossa;
+ }
+
+ public Date getAloitusajankohta() { return aloitusajankohta; }
+
+ public Integer getAjotiheys() {
+ return ajotiheys;
+ }
+}
diff --git a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/sijoittelu/dto/Sijoittelu.java b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/dto/Sijoittelu.java
similarity index 94%
rename from sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/sijoittelu/dto/Sijoittelu.java
rename to sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/dto/Sijoittelu.java
index 5b11b4d3f..b380da809 100644
--- a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/sijoittelu/dto/Sijoittelu.java
+++ b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/dto/Sijoittelu.java
@@ -1,4 +1,4 @@
-package fi.vm.sade.sijoittelu.jatkuva.sijoittelu.dto;
+package fi.vm.sade.sijoittelu.jatkuva.dto;
import java.util.concurrent.atomic.AtomicInteger;
diff --git a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/external/resource/seuranta/SijoitteluSeurantaResource.java b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/external/resource/seuranta/SijoitteluSeurantaResource.java
deleted file mode 100644
index f87d7f4c1..000000000
--- a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/external/resource/seuranta/SijoitteluSeurantaResource.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package fi.vm.sade.sijoittelu.jatkuva.external.resource.seuranta;
-
-import fi.vm.sade.sijoittelu.jatkuva.external.resource.seuranta.dto.SijoitteluDto;
-
-import java.util.Collection;
-
-public interface SijoitteluSeurantaResource {
-
- SijoitteluDto hae(String hakuOid);
-
- Collection hae();
-
- SijoitteluDto merkkaaSijoittelunAjossaTila(String hakuOid, boolean tila);
-
- SijoitteluDto merkkaaSijoittelunAjetuksi(String hakuOid);
-
- void poistaSijoittelu(String hakuOid);
-
- void paivitaSijoittelunAloitusajankohta(String hakuOid, long aloitusajankohta, int ajotiheys);
-}
diff --git a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/external/resource/seuranta/dto/SijoitteluDto.java b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/external/resource/seuranta/dto/SijoitteluDto.java
deleted file mode 100644
index 07a8956ef..000000000
--- a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/external/resource/seuranta/dto/SijoitteluDto.java
+++ /dev/null
@@ -1,81 +0,0 @@
-package fi.vm.sade.sijoittelu.jatkuva.external.resource.seuranta.dto;
-
-import org.joda.time.format.DateTimeFormat;
-import org.joda.time.format.DateTimeFormatter;
-
-import java.util.Date;
-
-public class SijoitteluDto {
- private static final DateTimeFormatter PVMFORMATTER = DateTimeFormat.forPattern("dd.MM.yyyy HH:mm");
-
- private final String hakuOid;
- private final boolean ajossa;
- private final Date viimeksiAjettu;
- private final String virhe;
- private Date aloitusajankohta;
- private Integer ajotiheys;
-
- public SijoitteluDto() {
- this.hakuOid = null;
- this.ajossa = false;
- this.viimeksiAjettu = null;
- this.virhe = null;
- this.aloitusajankohta = null;
- this.ajotiheys = null;
- }
-
- public SijoitteluDto(String hakuOid, boolean ajossa, Date viimeksiAjettu, String virhe, Date aloitusajankohta, Integer ajotiheys) {
- this.hakuOid = hakuOid;
- this.ajossa = ajossa;
- this.viimeksiAjettu = viimeksiAjettu;
- this.virhe = virhe;
- this.aloitusajankohta = aloitusajankohta;
- this.ajotiheys = ajotiheys;
- }
-
- public String getViimeksiAjettuFormatoituna() {
- if (viimeksiAjettu == null) {
- return null;
- }
- return PVMFORMATTER.print(viimeksiAjettu.getTime());
- }
-
- public String getAloitusajankohtaFormatoituna() {
- if (aloitusajankohta == null) {
- return null;
- }
- return PVMFORMATTER.print(aloitusajankohta.getTime());
- }
-
- public String getVirhe() {
- return virhe;
- }
-
- public String getHakuOid() {
- return hakuOid;
- }
-
- public Date getViimeksiAjettu() {
- return viimeksiAjettu;
- }
-
- public boolean isAjossa() {
- return ajossa;
- }
-
- public Date getAloitusajankohta() {
- return aloitusajankohta;
- }
-
- public void setAloitusajankohta(Date aloitusajankohta) {
- this.aloitusajankohta = aloitusajankohta;
- }
-
- public Integer getAjotiheys() {
- return ajotiheys;
- }
-
- public void setAjotiheys(Integer ajotiheys) {
- this.ajotiheys = ajotiheys;
- }
-}
diff --git a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/external/resource/seuranta/impl/SijoitteluSeurantaResourceImpl.java b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/external/resource/seuranta/impl/SijoitteluSeurantaResourceImpl.java
deleted file mode 100644
index 6bef26d39..000000000
--- a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/external/resource/seuranta/impl/SijoitteluSeurantaResourceImpl.java
+++ /dev/null
@@ -1,143 +0,0 @@
-package fi.vm.sade.sijoittelu.jatkuva.external.resource.seuranta.impl;
-
-import com.google.gson.reflect.TypeToken;
-import fi.vm.sade.sijoittelu.jatkuva.external.resource.seuranta.SijoitteluSeurantaResource;
-import fi.vm.sade.sijoittelu.jatkuva.external.resource.seuranta.dto.SijoitteluDto;
-import fi.vm.sade.sijoittelu.jatkuva.external.resource.viestintapalvelu.RestCasClient;
-import fi.vm.sade.sijoittelu.laskenta.util.UrlProperties;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Optional;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.context.annotation.Profile;
-import org.springframework.stereotype.Service;
-
-// TODO: clean up implementation
-@Service
-@Profile({"default", "dev"})
-public class SijoitteluSeurantaResourceImpl implements SijoitteluSeurantaResource {
-
- private final RestCasClient restCasClient;
-
- private final UrlProperties urlProperties;
-
- @Autowired
- public SijoitteluSeurantaResourceImpl(
- @Qualifier("SeurantaCasClient") RestCasClient restCasClient, UrlProperties urlProperties) {
- this.restCasClient = restCasClient;
- this.urlProperties = urlProperties;
- }
- ;
-
- @Override
- public SijoitteluDto hae(String hakuOid) {
- try {
- return this.restCasClient
- .get(
- this.urlProperties.url("valintalaskentakoostepalvelu.seuranta.rest.url")
- + "/sijoittelunseuranta/hae/"
- + hakuOid,
- new TypeToken() {},
- Collections.emptyMap(),
- 10 * 60 * 1000)
- .get();
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- }
-
- @Override
- public Collection hae() {
- try {
- return this.restCasClient
- .get(
- this.urlProperties.url("valintalaskentakoostepalvelu.seuranta.rest.url")
- + "/sijoittelunseuranta/hae",
- new TypeToken>() {},
- Collections.emptyMap(),
- 10 * 60 * 1000)
- .get();
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- }
-
- @Override
- public SijoitteluDto merkkaaSijoittelunAjossaTila(String hakuOid, boolean tila) {
- try {
- return this.restCasClient
- .put(
- this.urlProperties.url("valintalaskentakoostepalvelu.seuranta.rest.url")
- + "/sijoittelunseuranta/sijoittelu/"
- + hakuOid
- + "/ajossa/"
- + tila,
- new TypeToken() {},
- Optional.empty(),
- Collections.emptyMap(),
- 10 * 60 * 1000)
- .get();
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- }
-
- @Override
- public SijoitteluDto merkkaaSijoittelunAjetuksi(String hakuOid) {
- try {
- return this.restCasClient
- .put(
- this.urlProperties.url("valintalaskentakoostepalvelu.seuranta.rest.url")
- + "/sijoittelunseuranta/sijoittelu/"
- + hakuOid,
- new TypeToken() {},
- Optional.empty(),
- Collections.emptyMap(),
- 10 * 60 * 1000)
- .get();
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- }
-
- @Override
- public void poistaSijoittelu(String hakuOid) {
- try {
- this.restCasClient
- .delete(
- this.urlProperties.url("valintalaskentakoostepalvelu.seuranta.rest.url")
- + "/sijoittelunseuranta/sijoittelu/"
- + hakuOid,
- Collections.emptyMap(),
- 10 * 60 * 1000)
- .get();
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- }
-
- @Override
- public void paivitaSijoittelunAloitusajankohta(
- String hakuOid, long aloitusajankohta, int ajotiheys) {
- try {
- this.restCasClient
- .put(
- this.urlProperties.url("valintalaskentakoostepalvelu.seuranta.rest.url")
- + "/sijoittelunseuranta/sijoittelu/"
- + hakuOid
- + "/paivita"
- + "?aloitusajankohta="
- + aloitusajankohta
- + "&ajotiheys="
- + ajotiheys,
- new TypeToken() {},
- Optional.empty(),
- Collections.emptyMap(),
- 10 * 60 * 1000)
- .get();
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- }
-}
diff --git a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/sijoittelu/job/AjastettuSijoitteluJob.java b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/job/AjastettuSijoitteluJob.java
similarity index 87%
rename from sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/sijoittelu/job/AjastettuSijoitteluJob.java
rename to sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/job/AjastettuSijoitteluJob.java
index ac90c2ae7..a41d7ace3 100644
--- a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/sijoittelu/job/AjastettuSijoitteluJob.java
+++ b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/job/AjastettuSijoitteluJob.java
@@ -1,6 +1,6 @@
-package fi.vm.sade.sijoittelu.jatkuva.sijoittelu.job;
+package fi.vm.sade.sijoittelu.jatkuva.job;
-import fi.vm.sade.sijoittelu.jatkuva.external.resource.seuranta.SijoitteluSeurantaResource;
+import fi.vm.sade.sijoittelu.jatkuva.dao.JatkuvaSijoitteluDAO;
import fi.vm.sade.sijoittelu.laskenta.service.business.ToteutaSijoitteluService;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
@@ -26,8 +26,8 @@ public void executeInternal(JobExecutionContext context) throws JobExecutionExce
(ApplicationContext) context.getScheduler().getContext().get("applicationContext");
ToteutaSijoitteluService toteutaSijoitteluService =
applicationContext.getBean(ToteutaSijoitteluService.class);
- SijoitteluSeurantaResource sijoittelunSeurantaResource =
- applicationContext.getBean(SijoitteluSeurantaResource.class);
+ JatkuvaSijoitteluDAO sijoittelunSeurantaResource =
+ applicationContext.getBean(JatkuvaSijoitteluDAO.class);
String hakuOid = (String) context.getJobDetail().getJobDataMap().get("hakuOid");
try {
diff --git a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/parametrit/ParametritParser.java b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/parametrit/ParametritParser.java
index 837735fbb..1c8b0bf05 100644
--- a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/parametrit/ParametritParser.java
+++ b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/parametrit/ParametritParser.java
@@ -4,16 +4,12 @@
import fi.vm.sade.sijoittelu.jatkuva.external.resource.ohjausparametrit.dto.ParametritDTO;
import java.util.Calendar;
import java.util.Date;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.context.SecurityContextHolder;
public class ParametritParser {
- private static final Logger LOG = LoggerFactory.getLogger(ParametritParser.class);
-
private ParametritDTO parametrit;
private String rootOrganisaatioOid;
@@ -22,45 +18,6 @@ public ParametritParser(ParametritDTO parametrit, String rootOrganisaatioOid) {
this.rootOrganisaatioOid = rootOrganisaatioOid;
}
- public boolean pistesyottoEnabled() {
- if (isOPH()) {
- return true;
- }
- return valintapalvelunKayttoEnabled();
- }
-
- public boolean hakeneetEnabled() {
- if (isOPH()) {
- return true;
- }
- return valintapalvelunKayttoEnabled();
- }
-
- public boolean harkinnanvaraisetEnabled() {
- if (isOPH()) {
- return true;
- }
- return valintapalvelunKayttoEnabled();
- }
-
- public boolean valintakoekutsutEnabled() {
- if (isOPH()) {
- return true;
- }
- return valintapalvelunKayttoEnabled();
- }
-
- public boolean valintalaskentaEnabled() {
- return valintapalvelunKayttoEnabled();
- }
-
- public boolean hakijaryhmatEnabled() {
- if (isOPH()) {
- return true;
- }
- return valintapalvelunKayttoEnabled();
- }
-
public boolean valinnanhallintaEnabled() {
if (isOPH()) {
return true;
@@ -99,22 +56,6 @@ public boolean koetulostenTallentaminenEnabled() {
return isAllowedBetween(this.parametrit.getPH_KTT());
}
- public boolean koekutsujenMuodostaminenEnabled() {
- return isAllowedBetween(this.parametrit.getPH_KKM());
- }
-
- public boolean harkinnanvarainenPaatosTallennusEnabled() {
- if (isOPH()) {
- return true;
- }
- ParametriDTO param = this.parametrit.getPH_HVVPTP();
- Date now = Calendar.getInstance().getTime();
- if (param == null || param.getDate() == null || now.before(param.getDate())) {
- return true;
- }
- return false;
- }
-
private boolean isAllowedBetween(ParametriDTO param) {
if (isOPH()) {
return true;
@@ -128,11 +69,6 @@ private boolean isAllowedBetween(ParametriDTO param) {
return true;
}
- public Date opiskelijanPaikanVastaanottoPaattyy() {
- if (this.parametrit.getPH_OPVP() == null) return null;
- return this.parametrit.getPH_OPVP().getDate();
- }
-
private boolean isOPH() {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
for (GrantedAuthority authority : authentication.getAuthorities()) {
diff --git a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/sijoittelu/resource/SijoitteluAktivointiResource.java b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/resource/SijoitteluAktivointiResource.java
similarity index 89%
rename from sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/sijoittelu/resource/SijoitteluAktivointiResource.java
rename to sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/resource/SijoitteluAktivointiResource.java
index 6f050787d..8fb3230a9 100644
--- a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/sijoittelu/resource/SijoitteluAktivointiResource.java
+++ b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/resource/SijoitteluAktivointiResource.java
@@ -1,19 +1,19 @@
-package fi.vm.sade.sijoittelu.jatkuva.sijoittelu.resource;
+package fi.vm.sade.sijoittelu.jatkuva.resource;
import com.google.gson.Gson;
import fi.vm.sade.auditlog.Audit;
import fi.vm.sade.auditlog.Changes;
-import fi.vm.sade.sijoittelu.jatkuva.external.resource.seuranta.SijoitteluSeurantaResource;
-import fi.vm.sade.sijoittelu.jatkuva.external.resource.seuranta.dto.SijoitteluDto;
+import fi.vm.sade.sijoittelu.jatkuva.dao.JatkuvaSijoitteluDAO;
+import fi.vm.sade.sijoittelu.jatkuva.dto.JatkuvaSijoittelu;
import fi.vm.sade.sijoittelu.jatkuva.external.resource.tarjonta.TarjontaAsyncResource;
-import fi.vm.sade.sijoittelu.jatkuva.sijoittelu.dto.AjastettuSijoitteluInfo;
-import fi.vm.sade.sijoittelu.jatkuva.sijoittelu.dto.Sijoittelu;
+import fi.vm.sade.sijoittelu.jatkuva.dto.AjastettuSijoitteluInfo;
+import fi.vm.sade.sijoittelu.jatkuva.dto.Sijoittelu;
+import fi.vm.sade.sijoittelu.jatkuva.service.JatkuvaSijoitteluService;
import fi.vm.sade.sijoittelu.jatkuva.util.SecurityUtil;
import fi.vm.sade.sijoittelu.jatkuva.parametrit.service.HakuParametritService;
import fi.vm.sade.sijoittelu.jatkuva.security.AuthorityCheckService;
-import fi.vm.sade.sijoittelu.jatkuva.sijoittelu.komponentti.JatkuvaSijoittelu;
-import fi.vm.sade.sijoittelu.jatkuva.sijoittelu.route.SijoitteluAktivointiRoute;
-import fi.vm.sade.sijoittelu.jatkuva.sijoittelu.route.SijoittelunValvonta;
+import fi.vm.sade.sijoittelu.jatkuva.service.SijoittelunAktivointiService;
+import fi.vm.sade.sijoittelu.jatkuva.service.SijoittelunValvontaService;
import fi.vm.sade.valinta.sharedutils.AuditLog;
import fi.vm.sade.valinta.sharedutils.ValintaResource;
import fi.vm.sade.valinta.sharedutils.ValintaperusteetOperation;
@@ -40,7 +40,6 @@
import org.springframework.web.bind.annotation.*;
import org.springframework.web.context.request.async.DeferredResult;
-/** @Autowired(required = false) Camel-reitit valinnaisiksi poisrefaktorointia odotellessa. */
@RestController("SijoitteluAktivointiResource")
@RequestMapping("/resources/koostesijoittelu")
@PreAuthorize("isAuthenticated()")
@@ -55,16 +54,16 @@ public class SijoitteluAktivointiResource {
public static final String ANY_CRUD = "hasAnyRole('ROLE_APP_SIJOITTELU_CRUD')";
public static final String OPH_CRUD_ROLE = "ROLE_APP_SIJOITTELU_CRUD_1.2.246.562.10.00000000001";
- @Autowired private SijoitteluAktivointiRoute sijoitteluAktivointiProxy;
+ @Autowired private SijoittelunAktivointiService sijoitteluAktivointiProxy;
@Autowired(required = false)
- private JatkuvaSijoittelu jatkuvaSijoittelu;
+ private JatkuvaSijoitteluService jatkuvaSijoittelu;
@Autowired private HakuParametritService hakuParametritService;
- @Autowired private SijoitteluSeurantaResource sijoittelunSeurantaResource;
+ @Autowired private JatkuvaSijoitteluDAO sijoittelunSeurantaResource;
- @Autowired private SijoittelunValvonta sijoittelunValvonta;
+ @Autowired private SijoittelunValvontaService sijoittelunValvonta;
@Autowired private TarjontaAsyncResource tarjontaResource;
@@ -149,8 +148,8 @@ public String aktivoiJatkuvassaSijoittelussa(
if (StringUtils.isBlank(hakuOid)) {
return "get parameter 'hakuOid' required";
} else {
- SijoitteluDto sijoitteluDto = sijoittelunSeurantaResource.hae(hakuOid);
- if (sijoitteluDto.getAloitusajankohta() == null || sijoitteluDto.getAjotiheys() == null) {
+ JatkuvaSijoittelu jatkuvaSijoittelu = sijoittelunSeurantaResource.hae(hakuOid);
+ if (jatkuvaSijoittelu.getAloitusajankohta() == null || jatkuvaSijoittelu.getAjotiheys() == null) {
LOG.warn(
"Haulta {} puuttuu jatkuvan sijoittelun parametreja. Ei aktivoida jatkuvaa sijoittelua.");
return "ei aktivoitu";
@@ -201,7 +200,7 @@ public String poistaJatkuvastaSijoittelusta(
responseCode = "OK",
content = @Content(schema = @Schema(implementation = List.class)))
})
- public Collection aktiivisetSijoittelut() {
+ public Collection aktiivisetSijoittelut() {
return sijoittelunSeurantaResource.hae();
}
@@ -269,8 +268,8 @@ private String jatkuvaTilaAutorisoituOrganisaatiolle(String hakuOid) {
if (StringUtils.isBlank(hakuOid)) {
return null;
} else {
- SijoitteluDto sijoitteluDto = sijoittelunSeurantaResource.hae(hakuOid);
- return new Gson().toJson(sijoitteluDto);
+ JatkuvaSijoittelu jatkuvaSijoittelu = sijoittelunSeurantaResource.hae(hakuOid);
+ return new Gson().toJson(jatkuvaSijoittelu);
}
}
diff --git a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/service/JatkuvaSijoitteluService.java b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/service/JatkuvaSijoitteluService.java
new file mode 100644
index 000000000..22da11d51
--- /dev/null
+++ b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/service/JatkuvaSijoitteluService.java
@@ -0,0 +1,12 @@
+package fi.vm.sade.sijoittelu.jatkuva.service;
+
+import fi.vm.sade.sijoittelu.jatkuva.dto.AjastettuSijoitteluInfo;
+
+import java.util.List;
+
+public interface JatkuvaSijoitteluService {
+
+ List haeAjossaOlevatAjastetutSijoittelut();
+
+ void teeJatkuvaSijoittelu();
+}
diff --git a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/service/SijoittelunAktivointiService.java b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/service/SijoittelunAktivointiService.java
new file mode 100644
index 000000000..64b6c7e6e
--- /dev/null
+++ b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/service/SijoittelunAktivointiService.java
@@ -0,0 +1,8 @@
+package fi.vm.sade.sijoittelu.jatkuva.service;
+
+import fi.vm.sade.sijoittelu.jatkuva.dto.Sijoittelu;
+
+public interface SijoittelunAktivointiService {
+
+ void aktivoiSijoittelu(Sijoittelu sijoittelu);
+}
diff --git a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/service/SijoittelunValvontaService.java b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/service/SijoittelunValvontaService.java
new file mode 100644
index 000000000..2d1bd29fd
--- /dev/null
+++ b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/service/SijoittelunValvontaService.java
@@ -0,0 +1,7 @@
+package fi.vm.sade.sijoittelu.jatkuva.service;
+
+import fi.vm.sade.sijoittelu.jatkuva.dto.Sijoittelu;
+
+public interface SijoittelunValvontaService {
+ Sijoittelu haeAktiivinenSijoitteluHaulle(String hakuOid);
+}
diff --git a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/sijoittelu/route/impl/JatkuvaSijoitteluRouteImpl.java b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/service/impl/JatkuvaSijoitteluServiceImpl.java
similarity index 82%
rename from sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/sijoittelu/route/impl/JatkuvaSijoitteluRouteImpl.java
rename to sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/service/impl/JatkuvaSijoitteluServiceImpl.java
index 99449b312..157c4f5cb 100644
--- a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/sijoittelu/route/impl/JatkuvaSijoitteluRouteImpl.java
+++ b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/service/impl/JatkuvaSijoitteluServiceImpl.java
@@ -1,11 +1,12 @@
-package fi.vm.sade.sijoittelu.jatkuva.sijoittelu.route.impl;
+package fi.vm.sade.sijoittelu.jatkuva.service.impl;
-import fi.vm.sade.sijoittelu.jatkuva.external.resource.seuranta.SijoitteluSeurantaResource;
-import fi.vm.sade.sijoittelu.jatkuva.external.resource.seuranta.dto.SijoitteluDto;
-import fi.vm.sade.sijoittelu.jatkuva.sijoittelu.dto.AjastettuSijoitteluInfo;
+import fi.vm.sade.sijoittelu.jatkuva.dao.JatkuvaSijoitteluDAO;
+import fi.vm.sade.sijoittelu.jatkuva.dto.JatkuvaSijoittelu;
+import fi.vm.sade.sijoittelu.jatkuva.dto.AjastettuSijoitteluInfo;
+import fi.vm.sade.sijoittelu.jatkuva.service.JatkuvaSijoitteluService;
import fi.vm.sade.sijoittelu.jatkuva.util.Formatter;
-import fi.vm.sade.sijoittelu.jatkuva.sijoittelu.job.AjastettuSijoitteluJob;
-import fi.vm.sade.sijoittelu.jatkuva.sijoittelu.komponentti.JatkuvaSijoittelu;
+import fi.vm.sade.sijoittelu.jatkuva.job.AjastettuSijoitteluJob;
+
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.function.Function;
@@ -21,10 +22,10 @@
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;
-public class JatkuvaSijoitteluRouteImpl implements JatkuvaSijoittelu {
- private static final Logger LOG = LoggerFactory.getLogger(JatkuvaSijoitteluRouteImpl.class);
+public class JatkuvaSijoitteluServiceImpl implements JatkuvaSijoitteluService {
+ private static final Logger LOG = LoggerFactory.getLogger(JatkuvaSijoitteluServiceImpl.class);
- private final SijoitteluSeurantaResource sijoittelunSeurantaResource;
+ private final JatkuvaSijoitteluDAO sijoittelunSeurantaResource;
private final int VAKIO_AJOTIHEYS = 24;
private final Timer timer;
private final Scheduler sijoitteluScheduler;
@@ -38,7 +39,7 @@ private Timer createAjastettujenSijoitteluidenPaivittaja(boolean start, long run
new TimerTask() {
public void run() {
try {
- JatkuvaSijoitteluRouteImpl.this.teeJatkuvaSijoittelu();
+ JatkuvaSijoitteluServiceImpl.this.teeJatkuvaSijoittelu();
} catch (Exception e) {
LOG.error("Exception in JatkuvaSijoitteluTimerTask", e);
}
@@ -52,11 +53,11 @@ public void run() {
}
@Autowired
- public JatkuvaSijoitteluRouteImpl(
+ public JatkuvaSijoitteluServiceImpl(
@Value("${jatkuvasijoittelu.autostart:true}") boolean autoStartup,
@Value("${valintalaskentakoostepalvelu.jatkuvasijoittelu.intervalMinutes:5}")
long jatkuvaSijoitteluPollIntervalInMinutes,
- SijoitteluSeurantaResource sijoittelunSeurantaResource,
+ JatkuvaSijoitteluDAO sijoittelunSeurantaResource,
SchedulerFactoryBean schedulerFactoryBean) {
this.sijoittelunSeurantaResource = sijoittelunSeurantaResource;
this.timer =
@@ -73,7 +74,7 @@ public JatkuvaSijoitteluRouteImpl(
@Override
public void teeJatkuvaSijoittelu() {
LOG.info("Sijoitteluiden ajastin kaynnistyi");
- Map aktiivisetSijoittelut = getAktiivisetSijoittelut();
+ Map aktiivisetSijoittelut = getAktiivisetSijoittelut();
LOG.info(
"Sijoitteluiden ajastin sai seurannalta {} aktiivista sijoittelua.",
aktiivisetSijoittelut.size());
@@ -99,7 +100,7 @@ public List haeAjossaOlevatAjastetutSijoittelut() {
}
}
- private void laitaAjoon(Map aktiivisetSijoittelut) {
+ private void laitaAjoon(Map aktiivisetSijoittelut) {
aktiivisetSijoittelut.forEach(
(hakuOid, sijoitteluDto) -> {
if (sijoitteluDto.getAloitusajankohta() == null || sijoitteluDto.getAjotiheys() == null) {
@@ -113,7 +114,9 @@ private void laitaAjoon(Map aktiivisetSijoittelut) {
sijoitteluDto.getAjotiheys());
} else {
try {
- Date asetusAjankohta = getAloitusajankohta(sijoitteluDto).toDate();
+ // Käytetään minuutin tarkkuutta aloitusajankohdassa jotta ensimmäinen cron ei aikaisemmin
+ // kuin startAt
+ Date asetusAjankohta = getAloitusajankohta(sijoitteluDto).withSecondOfMinute(0).toDate();
Integer intervalli = getAjotiheys(sijoitteluDto);
String jobName =
@@ -177,7 +180,7 @@ private void laitaAjoon(Map aktiivisetSijoittelut) {
});
}
- private void poistaSammutetut(Map aktiivisetSijoittelut) {
+ private void poistaSammutetut(Map aktiivisetSijoittelut) {
try {
sijoitteluScheduler
.getJobGroupNames()
@@ -201,7 +204,7 @@ private void poistaSammutetut(Map aktiivisetSijoittelut)
}
}
- private Map getAktiivisetSijoittelut() {
+ private Map getAktiivisetSijoittelut() {
try {
return _getAktiivisetSijoittelut();
} catch (NotAuthorizedException e) {
@@ -210,28 +213,28 @@ private Map getAktiivisetSijoittelut() {
}
}
- private Map _getAktiivisetSijoittelut() {
+ private Map _getAktiivisetSijoittelut() {
return sijoittelunSeurantaResource.hae().stream()
.filter(Objects::nonNull)
- .filter(SijoitteluDto::isAjossa)
+ .filter(JatkuvaSijoittelu::isAjossa)
.filter(
sijoitteluDto -> {
DateTime aloitusajankohta = getAloitusajankohta(sijoitteluDto);
return aktivoidaanko(aloitusajankohta);
})
- .collect(Collectors.toMap(SijoitteluDto::getHakuOid, s -> s));
+ .collect(Collectors.toMap(JatkuvaSijoittelu::getHakuOid, s -> s));
}
- public int getAjotiheys(SijoitteluDto sijoitteluDto) {
- return Optional.ofNullable(sijoitteluDto.getAjotiheys()).orElse(VAKIO_AJOTIHEYS);
+ public int getAjotiheys(JatkuvaSijoittelu jatkuvaSijoittelu) {
+ return Optional.ofNullable(jatkuvaSijoittelu.getAjotiheys()).orElse(VAKIO_AJOTIHEYS);
}
public boolean aktivoidaanko(DateTime aloitusAika) {
return aloitusAika.isBefore(DateTime.now().plusHours(1));
}
- private DateTime getAloitusajankohta(SijoitteluDto sijoitteluDto) {
+ private DateTime getAloitusajankohta(JatkuvaSijoittelu jatkuvaSijoittelu) {
return new DateTime(
- Optional.ofNullable(sijoitteluDto.getAloitusajankohta()).orElse(new Date()));
+ Optional.ofNullable(jatkuvaSijoittelu.getAloitusajankohta()).orElse(new Date()));
}
}
diff --git a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/sijoittelu/route/impl/SijoitteluRouteImpl.java b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/service/impl/SijoitteluRouteImpl.java
similarity index 87%
rename from sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/sijoittelu/route/impl/SijoitteluRouteImpl.java
rename to sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/service/impl/SijoitteluRouteImpl.java
index 17738d087..83cb64e1c 100644
--- a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/sijoittelu/route/impl/SijoitteluRouteImpl.java
+++ b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/service/impl/SijoitteluRouteImpl.java
@@ -1,12 +1,12 @@
-package fi.vm.sade.sijoittelu.jatkuva.sijoittelu.route.impl;
+package fi.vm.sade.sijoittelu.jatkuva.service.impl;
import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.RemovalListener;
-import fi.vm.sade.sijoittelu.jatkuva.sijoittelu.dto.Sijoittelu;
+import fi.vm.sade.sijoittelu.jatkuva.dto.Sijoittelu;
import fi.vm.sade.sijoittelu.laskenta.service.business.ToteutaSijoitteluService;
-import fi.vm.sade.sijoittelu.jatkuva.sijoittelu.route.SijoitteluAktivointiRoute;
-import fi.vm.sade.sijoittelu.jatkuva.sijoittelu.route.SijoittelunValvonta;
+import fi.vm.sade.sijoittelu.jatkuva.service.SijoittelunAktivointiService;
+import fi.vm.sade.sijoittelu.jatkuva.service.SijoittelunValvontaService;
import java.util.concurrent.TimeUnit;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -14,7 +14,7 @@
import org.springframework.stereotype.Component;
@Component
-public class SijoitteluRouteImpl implements SijoittelunValvonta, SijoitteluAktivointiRoute {
+public class SijoitteluRouteImpl implements SijoittelunValvontaService, SijoittelunAktivointiService {
private static final Logger LOG = LoggerFactory.getLogger(SijoitteluRouteImpl.class);
private final ToteutaSijoitteluService toteutaSijoitteluService;
diff --git a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/sijoittelu/exception/SijoittelultaEiSisaltoaPoikkeus.java b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/sijoittelu/exception/SijoittelultaEiSisaltoaPoikkeus.java
deleted file mode 100644
index 7667d7770..000000000
--- a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/sijoittelu/exception/SijoittelultaEiSisaltoaPoikkeus.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package fi.vm.sade.sijoittelu.jatkuva.sijoittelu.exception;
-
-public class SijoittelultaEiSisaltoaPoikkeus extends RuntimeException {
- private static final long serialVersionUID = 1L;
-
- public SijoittelultaEiSisaltoaPoikkeus(String viesti) {
- super(viesti);
- }
-}
diff --git a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/sijoittelu/komponentti/JatkuvaSijoittelu.java b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/sijoittelu/komponentti/JatkuvaSijoittelu.java
deleted file mode 100644
index 432d591e1..000000000
--- a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/sijoittelu/komponentti/JatkuvaSijoittelu.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package fi.vm.sade.sijoittelu.jatkuva.sijoittelu.komponentti;
-
-import fi.vm.sade.sijoittelu.jatkuva.sijoittelu.dto.AjastettuSijoitteluInfo;
-
-import java.util.List;
-
-public interface JatkuvaSijoittelu {
-
- List haeAjossaOlevatAjastetutSijoittelut();
-
- void teeJatkuvaSijoittelu();
-}
diff --git a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/sijoittelu/komponentti/ModuloiPaivamaaraJaTunnit.java b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/sijoittelu/komponentti/ModuloiPaivamaaraJaTunnit.java
deleted file mode 100644
index 5899865ac..000000000
--- a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/sijoittelu/komponentti/ModuloiPaivamaaraJaTunnit.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package fi.vm.sade.sijoittelu.jatkuva.sijoittelu.komponentti;
-
-import fi.vm.sade.sijoittelu.jatkuva.util.Formatter;
-import org.joda.time.DateTime;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class ModuloiPaivamaaraJaTunnit {
- private static final Logger LOG = LoggerFactory.getLogger(ModuloiPaivamaaraJaTunnit.class);
-
- public static DateTime moduloiSeuraava(DateTime start, DateTime now, int moduloitavaTuntiMaara) {
- // if (now.isBefore(start))
- if (now.isBefore(start.minusHours(1))) {
- LOG.error(
- "Yritettiin moduloida seuraavaa suoritusaikaa vaikka aloitusaika ei ole viela tapahtunut! Aloituspvm {} mutta nyt on {}",
- Formatter.paivamaara(start.toDate()),
- Formatter.paivamaara(now.toDate()));
- throw new RuntimeException(
- "Yritettiin moduloida seuraavaa suoritusaikaa vaikka aloitusaika ei ole viela tapahtunut!");
- }
- int tavoiteTunti =
- seuraavaAskel(start.getHourOfDay(), now.getHourOfDay(), moduloitavaTuntiMaara);
- if (now.getHourOfDay() == tavoiteTunti && now.getMinuteOfHour() > start.getMinuteOfHour()) {
- tavoiteTunti += moduloitavaTuntiMaara;
- }
- return new DateTime(
- now.getYear(),
- now.getMonthOfYear(),
- now.getDayOfMonth(),
- start.getHourOfDay(),
- start.getMinuteOfHour())
- .plusHours(tavoiteTunti - start.getHourOfDay());
- }
-
- public static int seuraavaAskel(int alkuPiste, int tavoiteAlue, int askel) {
- if (alkuPiste <= tavoiteAlue) {
- int i = alkuPiste;
- while (i < tavoiteAlue) {
- i += askel;
- }
- return i;
- } else {
- int i = alkuPiste;
- while (i >= tavoiteAlue) {
- i -= askel;
- }
- return i + askel;
- }
- }
-}
diff --git a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/sijoittelu/route/SijoitteluAktivointiRoute.java b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/sijoittelu/route/SijoitteluAktivointiRoute.java
deleted file mode 100644
index 400a88a68..000000000
--- a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/sijoittelu/route/SijoitteluAktivointiRoute.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package fi.vm.sade.sijoittelu.jatkuva.sijoittelu.route;
-
-import fi.vm.sade.sijoittelu.jatkuva.sijoittelu.dto.Sijoittelu;
-
-public interface SijoitteluAktivointiRoute {
-
- void aktivoiSijoittelu(Sijoittelu sijoittelu);
-}
diff --git a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/sijoittelu/route/SijoittelunValvonta.java b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/sijoittelu/route/SijoittelunValvonta.java
deleted file mode 100644
index 6c9dadb6c..000000000
--- a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/jatkuva/sijoittelu/route/SijoittelunValvonta.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package fi.vm.sade.sijoittelu.jatkuva.sijoittelu.route;
-
-import fi.vm.sade.sijoittelu.jatkuva.sijoittelu.dto.Sijoittelu;
-
-public interface SijoittelunValvonta {
- Sijoittelu haeAktiivinenSijoitteluHaulle(String hakuOid);
-}
diff --git a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/laskenta/external/resource/HttpClients.java b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/laskenta/external/resource/HttpClients.java
index 90ad0f4c5..87ddb53ce 100644
--- a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/laskenta/external/resource/HttpClients.java
+++ b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/laskenta/external/resource/HttpClients.java
@@ -9,7 +9,7 @@
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
-import static fi.vm.sade.sijoittelu.laskenta.configuration.SijoitteluServiceConfiguration.CALLER_ID;
+import static fi.vm.sade.sijoittelu.configuration.SijoitteluServiceConfiguration.CALLER_ID;
import static fi.vm.sade.valinta.sharedutils.http.HttpResource.CSRF_VALUE;
@Configuration
diff --git a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/laskenta/resource/ErillisSijoitteluResource.java b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/laskenta/resource/ErillisSijoitteluResource.java
index d49d17948..4102d6aa3 100644
--- a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/laskenta/resource/ErillisSijoitteluResource.java
+++ b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/laskenta/resource/ErillisSijoitteluResource.java
@@ -7,8 +7,7 @@
import com.google.gson.JsonSyntaxException;
import fi.vm.sade.javautils.nio.cas.CasClient;
import fi.vm.sade.service.valintaperusteet.dto.ValintatapajonoDTO;
-import fi.vm.sade.sijoittelu.laskenta.configuration.SijoitteluServiceConfiguration;
-import fi.vm.sade.sijoittelu.laskenta.external.resource.HttpClients;
+import fi.vm.sade.sijoittelu.configuration.SijoitteluServiceConfiguration;
import fi.vm.sade.sijoittelu.laskenta.service.business.SijoitteluBusinessService;
import fi.vm.sade.sijoittelu.laskenta.util.UrlProperties;
import fi.vm.sade.sijoittelu.tulos.dto.ValisijoitteluDTO;
@@ -31,7 +30,6 @@
import org.springframework.web.bind.annotation.*;
import java.util.*;
-import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
diff --git a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/laskenta/service/business/ToteutaSijoitteluService.java b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/laskenta/service/business/ToteutaSijoitteluService.java
index 5eeec9590..579aee608 100644
--- a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/laskenta/service/business/ToteutaSijoitteluService.java
+++ b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/laskenta/service/business/ToteutaSijoitteluService.java
@@ -13,7 +13,7 @@
import fi.vm.sade.service.valintaperusteet.dto.ValintatapajonoCreateDTO;
import fi.vm.sade.service.valintaperusteet.dto.ValintatapajonoDTO;
import fi.vm.sade.sijoittelu.domain.SijoitteluajonTila;
-import fi.vm.sade.sijoittelu.laskenta.configuration.SijoitteluServiceConfiguration;
+import fi.vm.sade.sijoittelu.configuration.SijoitteluServiceConfiguration;
import fi.vm.sade.sijoittelu.laskenta.email.EmailService;
import fi.vm.sade.sijoittelu.laskenta.service.it.Haku;
import fi.vm.sade.sijoittelu.laskenta.service.it.TarjontaIntegrationService;
diff --git a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/laskenta/service/it/impl/TarjontaIntegrationServiceImpl.java b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/laskenta/service/it/impl/TarjontaIntegrationServiceImpl.java
index 02f8f90e1..eb7011f7f 100644
--- a/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/laskenta/service/it/impl/TarjontaIntegrationServiceImpl.java
+++ b/sijoittelu-service/src/main/java/fi/vm/sade/sijoittelu/laskenta/service/it/impl/TarjontaIntegrationServiceImpl.java
@@ -3,9 +3,8 @@
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import fi.vm.sade.javautils.nio.cas.CasClient;
-import fi.vm.sade.sijoittelu.laskenta.configuration.SijoitteluServiceConfiguration;
+import fi.vm.sade.sijoittelu.configuration.SijoitteluServiceConfiguration;
import fi.vm.sade.sijoittelu.laskenta.external.resource.HakuV1Resource;
-import fi.vm.sade.sijoittelu.laskenta.external.resource.HttpClients;
import fi.vm.sade.sijoittelu.laskenta.external.resource.OhjausparametriResource;
import fi.vm.sade.sijoittelu.laskenta.external.resource.dto.KoutaHaku;
import fi.vm.sade.sijoittelu.laskenta.external.resource.dto.ParametriDTO;
diff --git a/sijoittelu-service/src/main/resources/application.yml b/sijoittelu-service/src/main/resources/application.yml
index 42e945610..4295cbf23 100644
--- a/sijoittelu-service/src/main/resources/application.yml
+++ b/sijoittelu-service/src/main/resources/application.yml
@@ -1,6 +1,3 @@
-spring:
- flyway:
- enabled: false
logging:
level:
fi.vm.sade.javautils.nio.cas: warn # CasClient näyttää tunkevan INFO-entryyn koko responsen joten filtteröidään ne pois
\ No newline at end of file
diff --git a/sijoittelu-service/src/main/resources/db/migration/V20240419000000__add_jatkuva_sijoittelu_schema.sql b/sijoittelu-service/src/main/resources/db/migration/V20240419000000__add_jatkuva_sijoittelu_schema.sql
new file mode 100644
index 000000000..0c2e03d89
--- /dev/null
+++ b/sijoittelu-service/src/main/resources/db/migration/V20240419000000__add_jatkuva_sijoittelu_schema.sql
@@ -0,0 +1,18 @@
+CREATE TABLE IF NOT EXISTS jatkuvat (
+ haku_oid TEXT PRIMARY KEY,
+ jatkuva_paalla BOOLEAN,
+ viimeksi_ajettu TIMESTAMP,
+ aloitus TIMESTAMP,
+ ajotiheys INTEGER
+);
+
+CREATE TABLE IF NOT EXISTS jatkuva_virheet (
+ haku_oid TEXT NOT NULL,
+ aika TIMESTAMP,
+ virhe TEXT,
+ CONSTRAINT fk_haku_oid FOREIGN KEY (haku_oid) REFERENCES jatkuvat(haku_oid) ON DELETE CASCADE
+);
+
+DROP INDEX IF EXISTS jatkuva_virheet_haku_oid;
+
+CREATE INDEX jatkuva_virheet_haku_oid ON jatkuva_virheet (haku_oid);
diff --git a/sijoittelu-service/src/test/java/fi/vm/sade/sijoittelu/DevApp.java b/sijoittelu-service/src/test/java/fi/vm/sade/sijoittelu/DevApp.java
index 9003e361f..0ebdbf029 100644
--- a/sijoittelu-service/src/test/java/fi/vm/sade/sijoittelu/DevApp.java
+++ b/sijoittelu-service/src/test/java/fi/vm/sade/sijoittelu/DevApp.java
@@ -30,7 +30,7 @@ public static void main(String[] args) {
System.setProperty("web.url.cas", String.format("https://virkailija.%sopintopolku.fi/cas", ENVIRONMENT));
// postgres
- System.setProperty("valintarekisteri.db.url", "jdbc:postgresql://localhost:5433/sijoittelu");
+ System.setProperty("valintarekisteri.db.url", "jdbc:postgresql://localhost:5433/valintarekisteri");
System.setProperty("valintarekisteri.db.user", "oph");
System.setProperty("valintarekisteri.db.password", "oph");
@@ -39,6 +39,11 @@ public static void main(String[] args) {
System.setProperty("sijoittelu.valintalaskenta.postgresql.maxlifetimemillis", "60000");
System.setProperty("sijoittelu.valintalaskenta.postgresql.readonly", "true");
+ System.setProperty("sijoittelu.sijoittelu.postgresql.url", "jdbc:postgresql://localhost:5433/sijoittelu");
+ System.setProperty("sijoittelu.sijoittelu.postgresql.username", "oph");
+ System.setProperty("sijoittelu.sijoittelu.postgresql.password", "oph");
+ System.setProperty("sijoittelu.sijoittelu.postgresql.driver", "");
+
// ulkoiset palvelut
System.setProperty("host.virkailija", String.format("virkailija.%sopintopolku.fi", ENVIRONMENT));
System.setProperty("kayttooikeus-service.userDetails.byUsername", String.format("http://alb.%sopintopolku.fi:8888/kayttooikeus-service/userDetails/$1", ENVIRONMENT));
diff --git a/sijoittelu-service/src/test/java/fi/vm/sade/sijoittelu/HakijaryhmaTest.java b/sijoittelu-service/src/test/java/fi/vm/sade/sijoittelu/HakijaryhmaTest.java
index c2919a659..f371c801f 100644
--- a/sijoittelu-service/src/test/java/fi/vm/sade/sijoittelu/HakijaryhmaTest.java
+++ b/sijoittelu-service/src/test/java/fi/vm/sade/sijoittelu/HakijaryhmaTest.java
@@ -19,7 +19,6 @@
import fi.vm.sade.testing.AbstractIntegrationTest;
import fi.vm.sade.valintalaskenta.domain.dto.valintatieto.HakuDTO;
import fi.vm.sade.valintalaskenta.domain.valinta.Hakijaryhma;
-import fi.vm.sade.valintalaskenta.domain.valinta.Jonosija;
import fi.vm.sade.valintalaskenta.tulos.service.impl.ValintatietoService;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Disabled;
@@ -28,12 +27,11 @@
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
-import fi.vm.sade.valintalaskenta.domain.testdata.TestEntityDataUtil;
import org.springframework.test.context.jdbc.Sql;
import org.springframework.test.context.jdbc.SqlConfig;
+import org.springframework.test.context.ActiveProfiles;
import java.time.*;
-import java.time.temporal.TemporalAccessor;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
@@ -41,8 +39,10 @@
import java.util.List;
import java.util.stream.Collectors;
+@ActiveProfiles("test")
public class HakijaryhmaTest extends AbstractIntegrationTest {
private static final Logger LOG = LoggerFactory.getLogger(HakijaryhmaTest.class);
+
@Autowired
private ValintatietoService valintatietoService;
diff --git a/sijoittelu-service/src/test/java/fi/vm/sade/sijoittelu/KaikkiEhdonTayttavatHyvaksytaanTest.java b/sijoittelu-service/src/test/java/fi/vm/sade/sijoittelu/KaikkiEhdonTayttavatHyvaksytaanTest.java
index fe52c543c..9ac1aad08 100644
--- a/sijoittelu-service/src/test/java/fi/vm/sade/sijoittelu/KaikkiEhdonTayttavatHyvaksytaanTest.java
+++ b/sijoittelu-service/src/test/java/fi/vm/sade/sijoittelu/KaikkiEhdonTayttavatHyvaksytaanTest.java
@@ -17,6 +17,7 @@
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
+import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.jdbc.Sql;
import org.springframework.test.context.junit.jupiter.SpringExtension;
@@ -28,6 +29,7 @@
import java.util.List;
import java.util.stream.Collectors;
+@ActiveProfiles("test")
public class KaikkiEhdonTayttavatHyvaksytaanTest extends AbstractIntegrationTest {
@Autowired
diff --git a/sijoittelu-service/src/test/java/fi/vm/sade/sijoittelu/SijoitteluBusinessTest.java b/sijoittelu-service/src/test/java/fi/vm/sade/sijoittelu/SijoitteluBusinessTest.java
index aa158ed0b..f3a28125d 100644
--- a/sijoittelu-service/src/test/java/fi/vm/sade/sijoittelu/SijoitteluBusinessTest.java
+++ b/sijoittelu-service/src/test/java/fi/vm/sade/sijoittelu/SijoitteluBusinessTest.java
@@ -34,6 +34,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.test.context.jdbc.Sql;
+import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.util.ReflectionTestUtils;
import java.time.Instant;
@@ -45,6 +46,7 @@
import java.util.Set;
import java.util.stream.Collectors;
+@ActiveProfiles("test")
public class SijoitteluBusinessTest extends AbstractIntegrationTest {
@Autowired
diff --git a/sijoittelu-service/src/test/java/fi/vm/sade/sijoittelu/SijoitteluMontaJonoaTest.java b/sijoittelu-service/src/test/java/fi/vm/sade/sijoittelu/SijoitteluMontaJonoaTest.java
index 7fcd54f62..e3d0196a8 100644
--- a/sijoittelu-service/src/test/java/fi/vm/sade/sijoittelu/SijoitteluMontaJonoaTest.java
+++ b/sijoittelu-service/src/test/java/fi/vm/sade/sijoittelu/SijoitteluMontaJonoaTest.java
@@ -3,7 +3,6 @@
import com.google.common.collect.Lists;
import fi.vm.sade.testing.AbstractIntegrationTest;
-import fi.vm.sade.testing.TestConfigurationWithMocks;
import fi.vm.sade.sijoittelu.batch.logic.impl.DomainConverter;
import fi.vm.sade.sijoittelu.batch.logic.impl.algorithm.PrintHelper;
import fi.vm.sade.sijoittelu.batch.logic.impl.algorithm.SijoitteluConfiguration;
@@ -24,16 +23,12 @@
import fi.vm.sade.valintalaskenta.domain.dto.valintatieto.HakuDTO;
import fi.vm.sade.valintalaskenta.tulos.service.impl.ValintatietoService;
import org.apache.commons.lang3.time.DateUtils;
-import org.joda.time.DateTime;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.ApplicationContext;
-import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.jdbc.Sql;
-import org.springframework.test.context.junit.jupiter.SpringExtension;
import java.time.*;
import java.util.ArrayList;
@@ -43,14 +38,12 @@
import java.util.List;
import java.util.stream.Collectors;
+@ActiveProfiles("test")
public class SijoitteluMontaJonoaTest extends AbstractIntegrationTest {
@Autowired
private ValintatietoService valintatietoService;
- @Autowired
- private ApplicationContext applicationContext;
-
@Test
@Sql("monta_jonoa.sql")
public void testSijoitteluMontaJonoa() {
diff --git a/sijoittelu-service/src/test/java/fi/vm/sade/sijoittelu/SijoitteluTest.java b/sijoittelu-service/src/test/java/fi/vm/sade/sijoittelu/SijoitteluTest.java
index e741fe3f2..47abda6b3 100644
--- a/sijoittelu-service/src/test/java/fi/vm/sade/sijoittelu/SijoitteluTest.java
+++ b/sijoittelu-service/src/test/java/fi/vm/sade/sijoittelu/SijoitteluTest.java
@@ -3,7 +3,6 @@
import com.google.common.collect.ImmutableList;
import fi.vm.sade.testing.AbstractIntegrationTest;
-import fi.vm.sade.testing.TestConfigurationWithMocks;
import fi.vm.sade.sijoittelu.batch.logic.impl.algorithm.TestHelper;
import fi.vm.sade.sijoittelu.batch.logic.impl.algorithm.util.SijoitteluAlgorithmUtil;
import fi.vm.sade.sijoittelu.domain.HakemuksenTila;
@@ -12,11 +11,9 @@
import fi.vm.sade.sijoittelu.domain.Valintatapajono;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.springframework.test.context.ContextConfiguration;
-import org.springframework.test.context.junit.jupiter.SpringExtension;
+import org.springframework.test.context.ActiveProfiles;
import java.util.ArrayList;
import java.util.Collections;
@@ -24,6 +21,7 @@
import java.util.List;
import java.util.Map;
+@ActiveProfiles("test")
public class SijoitteluTest extends AbstractIntegrationTest {
private static final Logger LOG = LoggerFactory.getLogger(SijoitteluTest.class);
diff --git a/sijoittelu-service/src/test/java/fi/vm/sade/sijoittelu/VastaanottoTest.java b/sijoittelu-service/src/test/java/fi/vm/sade/sijoittelu/VastaanottoTest.java
index 4e86be14b..787539420 100644
--- a/sijoittelu-service/src/test/java/fi/vm/sade/sijoittelu/VastaanottoTest.java
+++ b/sijoittelu-service/src/test/java/fi/vm/sade/sijoittelu/VastaanottoTest.java
@@ -1,7 +1,6 @@
package fi.vm.sade.sijoittelu;
import fi.vm.sade.testing.AbstractIntegrationTest;
-import fi.vm.sade.testing.TestConfigurationWithMocks;
import fi.vm.sade.sijoittelu.batch.logic.impl.DomainConverter;
import fi.vm.sade.sijoittelu.batch.logic.impl.algorithm.PrintHelper;
import fi.vm.sade.sijoittelu.batch.logic.impl.algorithm.SijoitteluConfiguration;
@@ -21,19 +20,17 @@
import fi.vm.sade.valintalaskenta.tulos.service.impl.ValintatietoService;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
-import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.jdbc.Sql;
-import org.springframework.test.context.junit.jupiter.SpringExtension;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
-
+@ActiveProfiles("test")
public class VastaanottoTest extends AbstractIntegrationTest {
@Autowired
diff --git a/sijoittelu-service/src/test/java/fi/vm/sade/sijoittelu/jatkuva/resource/SijoitteluAktivointiResourceTest.java b/sijoittelu-service/src/test/java/fi/vm/sade/sijoittelu/jatkuva/resource/SijoitteluAktivointiResourceTest.java
new file mode 100644
index 000000000..ea4349bda
--- /dev/null
+++ b/sijoittelu-service/src/test/java/fi/vm/sade/sijoittelu/jatkuva/resource/SijoitteluAktivointiResourceTest.java
@@ -0,0 +1,61 @@
+package fi.vm.sade.sijoittelu.jatkuva.resource;
+
+import fi.vm.sade.sijoittelu.jatkuva.dao.JatkuvaSijoitteluDAO;
+import fi.vm.sade.sijoittelu.jatkuva.dto.JatkuvaSijoittelu;
+import fi.vm.sade.testing.AbstractIntegrationTest;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.ActiveProfiles;
+
+import java.time.Instant;
+import java.time.temporal.ChronoField;
+import java.util.Date;
+
+@ActiveProfiles("test")
+public class SijoitteluAktivointiResourceTest extends AbstractIntegrationTest {
+
+ @Autowired
+ private JatkuvaSijoitteluDAO jatkuvaSijoitteluDAO;
+
+ @Test
+ public void testSijoitteluDAO() {
+ String hakuOID = "hakuOID";
+ Instant aloitus = Instant.now().with(ChronoField.MICRO_OF_SECOND, 0);
+ int ajotiheys = 5;
+
+ // tallennetaan haun tiedot
+ this.jatkuvaSijoitteluDAO.paivitaSijoittelunAloitusajankohta(
+ hakuOID,
+ aloitus.toEpochMilli(),
+ ajotiheys);
+
+ // oid:lla hakeminen palauttaa samat tiedot
+ JatkuvaSijoittelu jatkuvaSijoittelu = this.jatkuvaSijoitteluDAO.hae(hakuOID);
+ Assertions.assertEquals(hakuOID, jatkuvaSijoittelu.getHakuOid());
+ Assertions.assertEquals(aloitus, jatkuvaSijoittelu.getAloitusajankohta().toInstant());
+ Assertions.assertEquals(ajotiheys, jatkuvaSijoittelu.getAjotiheys());
+ Assertions.assertEquals(false, jatkuvaSijoittelu.isAjossa());
+ Assertions.assertEquals(null, jatkuvaSijoittelu.getViimeksiAjettu());
+ Assertions.assertEquals(null, jatkuvaSijoittelu.getVirhe());
+
+ // kaikki haut sisältävät vain tallennetun haun
+ Assertions.assertEquals(1, this.jatkuvaSijoitteluDAO.hae().size());
+ Assertions.assertEquals(hakuOID, this.jatkuvaSijoitteluDAO.hae().iterator().next().getHakuOid());
+
+ // ajossatila päivittyy oikein
+ this.jatkuvaSijoitteluDAO.merkkaaSijoittelunAjossaTila(hakuOID, true);
+ Assertions.assertEquals(true, this.jatkuvaSijoitteluDAO.hae(hakuOID).isAjossa());
+
+ // merkkaa ajetuksi timestamp päivittyy oikein
+ this.jatkuvaSijoitteluDAO.merkkaaSijoittelunAjetuksi(hakuOID);
+ Assertions.assertTrue(this.jatkuvaSijoitteluDAO.hae(hakuOID).getViimeksiAjettu()
+ .before(new Date()));
+ Assertions.assertTrue(this.jatkuvaSijoitteluDAO.hae(hakuOID).getViimeksiAjettu()
+ .after(Date.from(Instant.now().minusSeconds(1))));
+
+ // sijoittelun poisto toimii
+ this.jatkuvaSijoitteluDAO.poistaSijoittelu(hakuOID);
+ Assertions.assertEquals(null, this.jatkuvaSijoitteluDAO.hae(hakuOID));
+ }
+}
diff --git a/sijoittelu-service/src/test/java/fi/vm/sade/testing/AbstractIntegrationTest.java b/sijoittelu-service/src/test/java/fi/vm/sade/testing/AbstractIntegrationTest.java
index 5748740b6..e4fb3a200 100644
--- a/sijoittelu-service/src/test/java/fi/vm/sade/testing/AbstractIntegrationTest.java
+++ b/sijoittelu-service/src/test/java/fi/vm/sade/testing/AbstractIntegrationTest.java
@@ -3,6 +3,7 @@
import fi.vm.sade.sijoittelu.App;
import org.junit.jupiter.api.AfterEach;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.web.server.LocalServerPort;
import org.springframework.context.annotation.*;
@@ -24,6 +25,7 @@ public abstract class AbstractIntegrationTest {
private final static List TABLES = List.of("jonosija", "muokattu_jonosija", "hakijaryhma", "valinnanvaihe", "valintatapajono");
@Autowired
+ @Qualifier("valintalaskentaJdbcTemplate")
private JdbcTemplate jdbcTemplate;
@LocalServerPort protected Integer port;
diff --git a/sijoittelu-service/src/test/java/fi/vm/sade/testing/TestConfigurationWithMocks.java b/sijoittelu-service/src/test/java/fi/vm/sade/testing/TestConfigurationWithMocks.java
index 5078fe590..496263077 100644
--- a/sijoittelu-service/src/test/java/fi/vm/sade/testing/TestConfigurationWithMocks.java
+++ b/sijoittelu-service/src/test/java/fi/vm/sade/testing/TestConfigurationWithMocks.java
@@ -14,10 +14,15 @@
import fi.vm.sade.valintalaskenta.tulos.logging.LaskentaAuditLogImpl;
import fi.vm.sade.valintalaskenta.tulos.mapping.ValintalaskentaModelMapper;
import fi.vm.sade.valintalaskenta.tulos.service.impl.JarjestyskriteerihistoriaServiceImpl;
+import org.flywaydb.core.Flyway;
import org.mockito.Mockito;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.test.context.TestConfiguration;
import org.springframework.context.annotation.*;
+import javax.sql.DataSource;
+
@TestConfiguration
@ComponentScan(basePackages = {
"fi.vm.sade.valintalaskenta.tulos.dao",
@@ -28,6 +33,23 @@
@Profile("test")
public class TestConfigurationWithMocks {
+ @Autowired
+ @Qualifier("valintalaskentaDataSource")
+ DataSource dataSource;
+
+ public static class ValintalaskentaFlywayMigrationDone {}
+
+ @Bean
+ public ValintalaskentaFlywayMigrationDone doValintalaskentaFlywayMigration() {
+ Flyway flyway = Flyway.configure()
+ .schemas("public")
+ .dataSource(dataSource)
+ .locations("filesystem:../../valintalaskenta/valintalaskenta-laskenta-service/src/main/resources/db/migration")
+ .load();
+ flyway.migrate();
+ return new ValintalaskentaFlywayMigrationDone();
+ }
+
@Bean
public ValintaperusteetResource valintaperusteetResource() { return Mockito.mock(ValintaperusteetResource.class); }
diff --git a/sijoittelu-service/src/test/java/fi/vm/sade/util/TempDockerDB.java b/sijoittelu-service/src/test/java/fi/vm/sade/util/TempDockerDB.java
index c38b5622d..402125a6b 100644
--- a/sijoittelu-service/src/test/java/fi/vm/sade/util/TempDockerDB.java
+++ b/sijoittelu-service/src/test/java/fi/vm/sade/util/TempDockerDB.java
@@ -9,8 +9,6 @@ public class TempDockerDB {
private static final String dbName = "sijoittelu";
private static final String containerName = "sijoittelu-postgres";
- private static final int port = 5433;
-
private static final int startStopRetries = 100;
private static final int startStopRetryIntervalMillis = 100;
@@ -24,14 +22,14 @@ private static boolean databaseIsRunning() {
};
private static void startDatabaseContainer() {
- LOG.info("Starting PostgreSQL container (localhost:" + port + "):");
+ LOG.info("Starting PostgreSQL container");
try {
- Process p = Runtime.getRuntime().exec("docker start " + containerName);
+ Process p = Runtime.getRuntime().exec("docker-compose -f sijoittelu-service/postgresql/docker-compose.yml up -d");
p.waitFor();
- String error = new String(p.getErrorStream().readAllBytes());
if (!tryTimes(() -> databaseIsRunning(), startStopRetries, startStopRetryIntervalMillis)) {
- throw new RuntimeException("postgres not accepting connections in port " + port);
+ String error = new String(p.getErrorStream().readAllBytes());
+ throw new RuntimeException("postgres not accepting connections: " + error);
}
} catch(Exception e) {
throw new RuntimeException(e);
@@ -51,7 +49,7 @@ public static void start() {
private static void stop() {
try {
LOG.info("Killing PostgreSQL container");
- Process p = Runtime.getRuntime().exec("docker stop " + containerName);
+ Process p = Runtime.getRuntime().exec("docker-compose -f sijoittelu-service/postgresql/docker-compose.yml stop");
p.waitFor();
} catch(Exception e) {
LOG.warn("PostgreSQL container didn't stop gracefully");
diff --git a/sijoittelu-service/src/test/resources/application.yml b/sijoittelu-service/src/test/resources/application.yml
index 54cd9adb4..574e36af3 100644
--- a/sijoittelu-service/src/test/resources/application.yml
+++ b/sijoittelu-service/src/test/resources/application.yml
@@ -1,18 +1,21 @@
spring:
main:
allow-bean-definition-overriding: true
- flyway:
- locations: filesystem:../../valintalaskenta/valintalaskenta-laskenta-service/src/main/resources/db/migration
- enabled: true
test:
context:
cache:
maxSize: 2
sijoittelu:
+ sijoittelu:
+ postgresql:
+ url: jdbc:tc:postgresql:15.4:///sijoittelu_test_database
+ username: user
+ password: password
+ driver: org.testcontainers.jdbc.ContainerDatabaseDriver
valintalaskenta:
postgresql:
- url: jdbc:tc:postgresql:15.4:///test_database
+ url: jdbc:tc:postgresql:15.4:///valintalaskenta_test_database
user: user
password: password
maxactive: 10
diff --git a/src/main/resources/oph-configuration/common.properties.template b/src/main/resources/oph-configuration/common.properties.template
index 4baf6588e..cc829400e 100644
--- a/src/main/resources/oph-configuration/common.properties.template
+++ b/src/main/resources/oph-configuration/common.properties.template
@@ -88,4 +88,4 @@ sijoittelu.email.smtp.password={{ sijoittelu_email_smtp_password | default('') }
sijoittelu.email.smtp.use_tls={{ sijoittelu_email_smtp_use_tls | default('false') }}
sijoittelu.email.smtp.toinen_aste_emails={{ sijoittelu_email_smtp_toinen_aste_emails | default('') }}
sijoittelu.email.smtp.kk_emails={{ sijoittelu_email_smtp_kk_emails | default('') }}
-sijoittelu.email.smtp.use_authentication={{ sijoittelu_email_smtp_use_authentication | default('false') }}
+sijoittelu.email.smtp.use_authentication={{ sijoittelu_email_smtp_use_authentication | default('false') }}
\ No newline at end of file
diff --git a/src/main/resources/oph-configuration/sijoittelu-service.properties.template b/src/main/resources/oph-configuration/sijoittelu-service.properties.template
index 1d306aebf..33a1ee1d5 100644
--- a/src/main/resources/oph-configuration/sijoittelu-service.properties.template
+++ b/src/main/resources/oph-configuration/sijoittelu-service.properties.template
@@ -8,6 +8,11 @@ cas-service.service=https://{{host_virkailija}}/sijoittelu-service
cas-service.sendRenew=false
cas-service.key=sijoittelu-service
+sijoittelu.sijoittelu.postgresql.username={{postgres_app_user}}
+sijoittelu.sijoittelu.postgresql.password={{host_postgresql_sijoittelu_app_password}}
+sijoittelu.sijoittelu.postgresql.url=jdbc:postgresql://{{host_postgresql_sijoittelu}}/sijoittelu
+sijoittelu.sijoittelu.postgresql.driver=org.postgresql.Driver
+
sijoittelu.valintalaskenta.postgresql.url=jdbc:postgresql://{{host_postgresql_valintalaskenta}}:{{port_postgresql}}/valintalaskenta?ApplicationName=sijoittelu-service
sijoittelu.valintalaskenta.postgresql.user={{postgres_app_user}}
sijoittelu.valintalaskenta.postgresql.password={{host_postgresql_valintalaskenta_app_password}}