Prioritization expiry and clean scheduler service
[ccsdk/cds.git] / ms / blueprintsprocessor / functions / message-prioritizaion / src / main / kotlin / org / onap / ccsdk / cds / blueprintsprocessor / functions / message / prioritization / db / PrioritizationMessageRepository.kt
1 /*
2  * Copyright © 2018-2019 AT&T Intellectual Property.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 package org.onap.ccsdk.cds.blueprintsprocessor.functions.message.prioritization.db
18
19 import org.springframework.data.domain.Pageable
20 import org.springframework.data.jpa.repository.JpaRepository
21 import org.springframework.data.jpa.repository.Modifying
22 import org.springframework.data.jpa.repository.Query
23 import org.springframework.stereotype.Repository
24 import org.springframework.transaction.annotation.Transactional
25 import java.util.Date
26
27 @Repository
28 @Transactional(readOnly = true)
29 interface PrioritizationMessageRepository : JpaRepository<MessagePrioritization, String> {
30
31     @Query("FROM MessagePrioritization pm WHERE pm.group = :group ORDER BY pm.createdDate asc")
32     fun findByGroup(group: String, count: Pageable): List<MessagePrioritization>?
33
34     @Query(
35         "FROM MessagePrioritization pm WHERE pm.group = :group AND pm.state in :states " +
36             "ORDER BY pm.createdDate asc"
37     )
38     fun findByGroupAndStateIn(group: String, states: List<String>, count: Pageable): List<MessagePrioritization>?
39
40     @Query(
41         "FROM MessagePrioritization pm WHERE pm.group = :group AND pm.state in :states " +
42             "ORDER BY pm.updatedDate asc"
43     )
44     fun findByGroupAndStateInOrderByUpdatedDate(group: String, states: List<String>, count: Pageable):
45         List<MessagePrioritization>?
46
47     @Query(
48         "FROM MessagePrioritization pm WHERE pm.group = :group AND pm.state in :states " +
49             "AND pm.expiryDate > :expiryCheckDate ORDER BY pm.createdDate asc"
50     )
51     fun findByGroupAndStateInAndNotExpiredDate(
52         group: String,
53         states: List<String>,
54         expiryCheckDate: Date,
55         count: Pageable
56     ): List<MessagePrioritization>?
57
58     @Query(
59         "FROM MessagePrioritization pm WHERE pm.state in :states " +
60             "AND pm.expiryDate < :expiryCheckDate ORDER BY pm.createdDate asc"
61     )
62     fun findByStateInAndExpiredDate(
63         states: List<String>,
64         expiryCheckDate: Date,
65         count: Pageable
66     ): List<MessagePrioritization>?
67
68     @Query(
69         "FROM MessagePrioritization pm WHERE pm.group = :group AND pm.state in :states " +
70             "AND pm.expiryDate < :expiryCheckDate ORDER BY pm.createdDate asc"
71     )
72     fun findByGroupAndStateInAndExpiredDate(
73         group: String,
74         states: List<String>,
75         expiryCheckDate: Date,
76         count: Pageable
77     ): List<MessagePrioritization>?
78
79     @Query(
80         "FROM MessagePrioritization pm WHERE pm.group = :group " +
81             "AND pm.expiryDate < :expiryCheckDate ORDER BY pm.createdDate asc"
82     )
83     fun findByGroupAndExpiredDate(group: String, expiryCheckDate: Date, count: Pageable): List<MessagePrioritization>?
84
85     @Query(
86         "FROM MessagePrioritization pm WHERE  pm.expiryDate < :expiryCheckDate ORDER BY pm.createdDate asc"
87     )
88     fun findByExpiredDate(expiryCheckDate: Date, count: Pageable): List<MessagePrioritization>?
89
90     @Query(
91         "FROM MessagePrioritization pm WHERE pm.group = :group AND pm.state in :states " +
92             "AND pm.correlationId = :correlationId ORDER BY pm.createdDate asc"
93     )
94     fun findByGroupAndCorrelationId(group: String, states: List<String>, correlationId: String):
95         List<MessagePrioritization>?
96
97     @Query(
98         "FROM MessagePrioritization pm WHERE pm.group = :group AND pm.state in :states " +
99             "AND pm.type in :types AND pm.correlationId = :correlationId ORDER BY pm.createdDate asc"
100     )
101     fun findByGroupAndTypesAndCorrelationId(
102         group: String,
103         states: List<String>,
104         types: List<String>,
105         correlationId: String
106     ): List<MessagePrioritization>?
107
108     @Modifying
109     @Transactional
110     @Query(
111         "UPDATE MessagePrioritization SET state = :state, updatedDate = :currentDate " +
112             "WHERE id = :id"
113     )
114     fun setStateForMessageId(id: String, state: String, currentDate: Date): Int
115
116     @Modifying
117     @Transactional
118     @Query(
119         "UPDATE MessagePrioritization SET priority = :priority, updatedDate = :currentDate " +
120             "WHERE id = :id"
121     )
122     fun setPriorityForMessageId(id: String, priority: String, currentDate: Date): Int
123
124     @Modifying
125     @Transactional
126     @Query(
127         "UPDATE MessagePrioritization SET state = :state, updatedDate = :currentDate " +
128             "WHERE id IN :ids"
129     )
130     fun setStateForMessageIds(ids: List<String>, state: String, currentDate: Date): Int
131
132     @Modifying
133     @Transactional
134     @Query(
135         "UPDATE MessagePrioritization SET priority = :priority, updatedDate = :currentDate " +
136             "WHERE id IN :ids"
137     )
138     fun setPriorityForMessageIds(ids: List<String>, priority: String, currentDate: Date): Int
139
140     @Modifying
141     @Transactional
142     @Query(
143         "UPDATE MessagePrioritization SET state = :state, error = :error, updatedDate = :currentDate " +
144             "WHERE id = :id"
145     )
146     fun setStateAndErrorForMessageId(id: String, state: String, error: String, currentDate: Date): Int
147
148     @Modifying
149     @Transactional
150     @Query(
151         "UPDATE MessagePrioritization SET state = :state, " +
152             "aggregatedMessageIds = :aggregatedMessageIds, updatedDate = :currentDate WHERE id = :id"
153     )
154     fun setStateAndAggregatedMessageIds(id: String, state: String, aggregatedMessageIds: String, currentDate: Date): Int
155
156     @Modifying
157     @Transactional
158     @Query("DELETE FROM MessagePrioritization WHERE id IN :ids")
159     fun deleteByIds(ids: List<String>)
160
161     @Modifying
162     @Transactional
163     @Query("DELETE FROM MessagePrioritization WHERE expiryDate > :expiryCheckDate ")
164     fun deleteByExpiryDate(expiryCheckDate: Date)
165
166     @Modifying
167     @Transactional
168     @Query("DELETE FROM MessagePrioritization WHERE group = :group")
169     fun deleteGroup(group: String)
170
171     @Modifying
172     @Transactional
173     @Query("DELETE FROM MessagePrioritization WHERE group = :group AND state IN :states")
174     fun deleteGroupAndStateIn(group: String, states: List<String>)
175 }